Advertisement
Guest User

Untitled

a guest
Jan 27th, 2020
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.08 KB | None | 0 0
  1. // Даниелян Самвел, 47, 13 лаба
  2. // Во входном файле записан русский текст. Найти в тексте слова, содержащие букву, не входящую ни в одно из слов текста с максимальной длиной,
  3. // записать их заглавными буквами и указать после каждого такого слова в скобках найденные буквы.
  4. // Полученный текст записать в выходной файл. Весь текст, кроме найденных слов, должен остаться неизменным, включая и знаки препинания.
  5.  
  6. #include <iostream>
  7. #include <fstream>
  8. #include <string>
  9. using namespace std;
  10.  
  11. bool isLetter(int a) {
  12. if ((a >= (unsigned char)'А' && a <= (unsigned char)'я') || a == (unsigned char)'ё' || a == (unsigned char)'Ё') {
  13. return true;
  14. }
  15. return false;
  16. }
  17.  
  18. void deleteThisLetterEverywhere(char* words[], char letter, int size, int& iSize) {
  19. for (int i = 0; i < size; i++) {
  20. for (int j = 0; j < strlen(words[i]); j++) {
  21. iSize = strlen(words[i]);
  22. if ((char)tolower(words[i][j]) == letter) {
  23. for (int k = j; k < iSize; k++) {
  24. words[i][k] = words[i][k + 1];
  25. }
  26. iSize--;
  27. j--;
  28. }
  29. }
  30. }
  31. }
  32.  
  33. void deleteCopies(char*& arr, int& size) {
  34. char* newArr = new char[size + 1];
  35.  
  36. for (int i = 0; i < size; i++) {
  37. newArr[i] = arr[i];
  38. }
  39.  
  40. for (int i = 0; i < size; i++) {
  41. for (int j = i + 1; j < size; j++) {
  42. if (arr[i] == arr[j]) {
  43. delete[] newArr;
  44. for (int m = i; m < size - 1; m++) {
  45. arr[m] = arr[m + 1];
  46. }
  47. size--;
  48. newArr = new char[size + 1];
  49. for (int m = 0; m < size; m++) {
  50. newArr[m] = arr[m];
  51. }
  52. i--;
  53. break;
  54. }
  55. }
  56. }
  57. newArr[size] = 0;
  58. // delete[] arr не работает
  59. arr = newArr;
  60. }
  61.  
  62. char* findUniqLetters(char* words[], int size) {
  63. char* uniqLetters = new char[size + 1];
  64. int counter = 0;
  65. for (int i = 0; i < size; i++) {
  66. for (int j = 0; j < strlen(words[i]); j++) {
  67. int iSize = strlen(words[i]);
  68. for (int k = i + 1; k < size; k++) {
  69. for (int m = 0; m < strlen(words[k]); m++) {
  70. int kSize = strlen(words[k]);
  71. if ((char)tolower(words[i][j]) == (char)tolower(words[k][m])) {
  72. counter++;
  73. deleteThisLetterEverywhere(words, (char)tolower(words[i][j]), size, iSize);
  74. j--;
  75. break;
  76. }
  77. }
  78. if (counter > 0) {
  79. counter = 0;
  80. break;
  81. }
  82. }
  83. }
  84. counter = 0;
  85. }
  86. int countIterations = 0;
  87. for (int i = 0; i < size; i++) {
  88. for (int j = 0; j < strlen(words[i]); j++) {
  89. uniqLetters[countIterations++] = (char)tolower(words[i][j]);
  90. }
  91. }
  92. uniqLetters[countIterations] = 0;
  93. return uniqLetters;
  94. }
  95.  
  96. int main() {
  97. setlocale(LC_ALL, "Russian");
  98. char word[100], * words[10000], * pword = nullptr;
  99. int i = 0, n = 0;
  100. char path[] = "myFile.txt";
  101. fstream file(path);
  102. int c = 0;
  103. while ((c = file.get()) != EOF) {
  104. if (isLetter(c)) {
  105. i = 0;
  106. pword = word;
  107. while (isLetter(c)) {
  108. *pword = c;
  109. *pword++;
  110. i++;
  111. c = file.get();
  112. }
  113. if (pword) {
  114. pword = nullptr;
  115. words[n] = new char[i + 1];
  116. for (int j = 0; j < i; j++) {
  117. words[n][j] = word[j];
  118. }
  119. words[n][i] = 0;
  120. n++;
  121. }
  122. }
  123. }
  124. file.close();
  125. char* uniqLetters = findUniqLetters(words, n);
  126. int size = strlen(uniqLetters);
  127. deleteCopies(uniqLetters, size);
  128. fstream newFile;
  129. newFile.open("myFile.txt");
  130. char changedText[10000] = "";
  131. char* usedUniqLetters = new char[100];
  132. char s = ' ';
  133. int counter = 0;
  134. int countText = 0;
  135. while (size > 0) {
  136. s = newFile.get();
  137. for (int i = 0; i < size; i++) {
  138. if (s == uniqLetters[i]) {
  139. s = (char)toupper(s);
  140. usedUniqLetters[counter++] = (char)tolower(s);
  141. for (int j = i; j < size; j++) {
  142. uniqLetters[j] = uniqLetters[j + 1];
  143. }
  144. size--;
  145. break;
  146. }
  147. }
  148. changedText[countText++] = s;
  149. usedUniqLetters[counter] = 0;
  150. while (s != ' ') {
  151. s = newFile.get();
  152. if (s == -1) {
  153. for (int i = 0; i < size; i++) {
  154. if (s == uniqLetters[i]) {
  155. s = (char)toupper(s);
  156. usedUniqLetters[counter++] = (char)tolower(s);
  157. for (int j = i; j < size; j++) {
  158. uniqLetters[j] = uniqLetters[j + 1];
  159. }
  160. size--;
  161. break;
  162. }
  163. }
  164. if (counter > 0) {
  165. char scobka1[100] = "(";
  166. char skobka2[] = ") ";
  167. for (int i = 0; i < strlen(usedUniqLetters); i++) {
  168. char element[2] = "";
  169. element[0] = usedUniqLetters[i];
  170. strcat_s(scobka1, element);
  171. }
  172. strcat_s(scobka1, skobka2);
  173. int shit = 0;
  174. int sizeShit = strlen(changedText);
  175. for (int i = sizeShit; i < strlen(scobka1) + sizeShit; i++) {
  176. changedText[i] = scobka1[shit++];
  177. countText++;
  178. }
  179. countText = strlen(changedText);
  180. counter = 0;
  181. usedUniqLetters[0] = '\0';
  182. }
  183. break;
  184. }
  185. for (int i = 0; i < size; i++) {
  186. if (s == uniqLetters[i] || s == usedUniqLetters[i]) {
  187. s = (char)toupper(s);
  188. usedUniqLetters[counter++] = (char)tolower(s);
  189. for (int j = i; j < size; j++) {
  190. uniqLetters[j] = uniqLetters[j + 1];
  191. }
  192. size--;
  193. break;
  194. }
  195. }
  196. usedUniqLetters[counter] = 0;
  197. changedText[countText++] = s;
  198. if (s == ' ' && (counter > 0)) {
  199. char scobka1[100] = "(";
  200. char skobka2[] = ") ";
  201. for (int i = 0; i < strlen(usedUniqLetters); i++) {
  202. char element[2] = "";
  203. element[0] = usedUniqLetters[i];
  204. strcat_s(scobka1, element);
  205. }
  206. strcat_s(scobka1, skobka2);
  207. int shit = 0;
  208. int sizeShit = strlen(changedText);
  209. for (int i = sizeShit - 1; i < strlen(scobka1) + (sizeShit - 1); i++) {
  210. changedText[i] = scobka1[shit++];
  211. countText++;
  212. }
  213. countText = strlen(changedText);
  214. counter = 0;
  215. usedUniqLetters[0] = '\0';
  216. }
  217. }
  218. }
  219. for (int i = 0; i < strlen(changedText); i++) {
  220. cout << changedText[i] << endl;
  221. }
  222. int a = strlen(usedUniqLetters);
  223. delete usedUniqLetters;
  224. newFile.close();
  225. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement