Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Даниелян Самвел, 47, 13 лаба
- // Во входном файле записан русский текст. Найти в тексте слова, содержащие букву, не входящую ни в одно из слов текста с максимальной длиной,
- // записать их заглавными буквами и указать после каждого такого слова в скобках найденные буквы.
- // Полученный текст записать в выходной файл. Весь текст, кроме найденных слов, должен остаться неизменным, включая и знаки препинания.
- #include <iostream>
- #include <fstream>
- #include <string>
- using namespace std;
- bool isLetter(int a) {
- if ((a >= (unsigned char)'А' && a <= (unsigned char)'я') || a == (unsigned char)'ё' || a == (unsigned char)'Ё') {
- return true;
- }
- return false;
- }
- void deleteThisLetterEverywhere(char* words[], char letter, int size, int& iSize) {
- for (int i = 0; i < size; i++) {
- for (int j = 0; j < strlen(words[i]); j++) {
- iSize = strlen(words[i]);
- if ((char)tolower(words[i][j]) == letter) {
- for (int k = j; k < iSize; k++) {
- words[i][k] = words[i][k + 1];
- }
- iSize--;
- j--;
- }
- }
- }
- }
- void deleteCopies(char*& arr, int& size) {
- char* newArr = new char[size + 1];
- for (int i = 0; i < size; i++) {
- newArr[i] = arr[i];
- }
- for (int i = 0; i < size; i++) {
- for (int j = i + 1; j < size; j++) {
- if (arr[i] == arr[j]) {
- delete[] newArr;
- for (int m = i; m < size - 1; m++) {
- arr[m] = arr[m + 1];
- }
- size--;
- newArr = new char[size + 1];
- for (int m = 0; m < size; m++) {
- newArr[m] = arr[m];
- }
- i--;
- break;
- }
- }
- }
- newArr[size] = 0;
- // delete[] arr не работает
- arr = newArr;
- }
- char* findUniqLetters(char* words[], int size) {
- char* uniqLetters = new char[size + 1];
- int counter = 0;
- for (int i = 0; i < size; i++) {
- for (int j = 0; j < strlen(words[i]); j++) {
- int iSize = strlen(words[i]);
- for (int k = i + 1; k < size; k++) {
- for (int m = 0; m < strlen(words[k]); m++) {
- int kSize = strlen(words[k]);
- if ((char)tolower(words[i][j]) == (char)tolower(words[k][m])) {
- counter++;
- deleteThisLetterEverywhere(words, (char)tolower(words[i][j]), size, iSize);
- j--;
- break;
- }
- }
- if (counter > 0) {
- counter = 0;
- break;
- }
- }
- }
- counter = 0;
- }
- int countIterations = 0;
- for (int i = 0; i < size; i++) {
- for (int j = 0; j < strlen(words[i]); j++) {
- uniqLetters[countIterations++] = (char)tolower(words[i][j]);
- }
- }
- uniqLetters[countIterations] = 0;
- return uniqLetters;
- }
- int main() {
- setlocale(LC_ALL, "Russian");
- char word[100], * words[10000], * pword = nullptr;
- int i = 0, n = 0;
- char path[] = "myFile.txt";
- fstream file(path);
- int c = 0;
- while ((c = file.get()) != EOF) {
- if (isLetter(c)) {
- i = 0;
- pword = word;
- while (isLetter(c)) {
- *pword = c;
- *pword++;
- i++;
- c = file.get();
- }
- if (pword) {
- pword = nullptr;
- words[n] = new char[i + 1];
- for (int j = 0; j < i; j++) {
- words[n][j] = word[j];
- }
- words[n][i] = 0;
- n++;
- }
- }
- }
- file.close();
- char* uniqLetters = findUniqLetters(words, n);
- int size = strlen(uniqLetters);
- deleteCopies(uniqLetters, size);
- fstream newFile;
- newFile.open("myFile.txt");
- char changedText[10000] = "";
- char* usedUniqLetters = new char[100];
- char s = ' ';
- int counter = 0;
- int countText = 0;
- while (size > 0) {
- s = newFile.get();
- for (int i = 0; i < size; i++) {
- if (s == uniqLetters[i]) {
- s = (char)toupper(s);
- usedUniqLetters[counter++] = (char)tolower(s);
- for (int j = i; j < size; j++) {
- uniqLetters[j] = uniqLetters[j + 1];
- }
- size--;
- break;
- }
- }
- changedText[countText++] = s;
- usedUniqLetters[counter] = 0;
- while (s != ' ') {
- s = newFile.get();
- if (s == -1) {
- for (int i = 0; i < size; i++) {
- if (s == uniqLetters[i]) {
- s = (char)toupper(s);
- usedUniqLetters[counter++] = (char)tolower(s);
- for (int j = i; j < size; j++) {
- uniqLetters[j] = uniqLetters[j + 1];
- }
- size--;
- break;
- }
- }
- if (counter > 0) {
- char scobka1[100] = "(";
- char skobka2[] = ") ";
- for (int i = 0; i < strlen(usedUniqLetters); i++) {
- char element[2] = "";
- element[0] = usedUniqLetters[i];
- strcat_s(scobka1, element);
- }
- strcat_s(scobka1, skobka2);
- int shit = 0;
- int sizeShit = strlen(changedText);
- for (int i = sizeShit; i < strlen(scobka1) + sizeShit; i++) {
- changedText[i] = scobka1[shit++];
- countText++;
- }
- countText = strlen(changedText);
- counter = 0;
- usedUniqLetters[0] = '\0';
- }
- break;
- }
- for (int i = 0; i < size; i++) {
- if (s == uniqLetters[i] || s == usedUniqLetters[i]) {
- s = (char)toupper(s);
- usedUniqLetters[counter++] = (char)tolower(s);
- for (int j = i; j < size; j++) {
- uniqLetters[j] = uniqLetters[j + 1];
- }
- size--;
- break;
- }
- }
- usedUniqLetters[counter] = 0;
- changedText[countText++] = s;
- if (s == ' ' && (counter > 0)) {
- char scobka1[100] = "(";
- char skobka2[] = ") ";
- for (int i = 0; i < strlen(usedUniqLetters); i++) {
- char element[2] = "";
- element[0] = usedUniqLetters[i];
- strcat_s(scobka1, element);
- }
- strcat_s(scobka1, skobka2);
- int shit = 0;
- int sizeShit = strlen(changedText);
- for (int i = sizeShit - 1; i < strlen(scobka1) + (sizeShit - 1); i++) {
- changedText[i] = scobka1[shit++];
- countText++;
- }
- countText = strlen(changedText);
- counter = 0;
- usedUniqLetters[0] = '\0';
- }
- }
- }
- for (int i = 0; i < strlen(changedText); i++) {
- cout << changedText[i] << endl;
- }
- int a = strlen(usedUniqLetters);
- delete usedUniqLetters;
- newFile.close();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement