Advertisement
Guest User

Untitled

a guest
Jan 20th, 2020
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.29 KB | None | 0 0
  1. // Даниелян Самвел, 36 вариант, 11 лаба
  2. // Во входном файле записан русский текст, содержащий не более 1000 слов.
  3. // Вывести в порядке, обратном к алфавитному, слова текста, содержащие не менее четырёх согласных,
  4. // в остальных словах удалить гласные и продублировать согласные буквы. Слова вывести по одному в строке.
  5.  
  6. #include "pch.h"
  7. #include <iostream>
  8. #include <fstream>
  9.  
  10. using namespace std;
  11.  
  12. bool isLetter(int c)
  13. {
  14. if ((c >= (unsigned char)'А' && c <= (unsigned char)'я') || c == (unsigned char)'ё' || c == (unsigned char)'Ё')
  15. return true;
  16. else
  17. return false;
  18. }
  19.  
  20. int countConsonants(char word[]) {
  21. int counter = 0;
  22. char consonants[] = "бвгджзйклмнпрстфхцчшщъь";
  23.  
  24. for (int i = 0; i < strlen(word); i++)
  25. for (int j = 0; j < strlen(consonants); j++)
  26. if ((word[i] == consonants[j]) || (word[i] == toupper(consonants[j]))) {
  27. counter++;
  28. break;
  29. }
  30. int a = 1;
  31. return counter;
  32. }
  33.  
  34. char* deleteVowelsdoubleConsonants(char word[]) {
  35. char vowels[] = "оуаэыёюяеи";
  36. char consonants[] = "бвгджзйклмнпрстфхцчшщъь";
  37. char* copyWord = word;
  38. int size = strlen(copyWord);
  39. char* transformedWord = new char[size];
  40.  
  41. for (int i = 0; i < size; i++) {
  42. for (int j = 0; j < strlen(vowels); j++) {
  43. if ((copyWord[i] == vowels[j]) || (copyWord[i] == toupper(vowels[j]))) {
  44. size--;
  45. for (int k = i; k < size; k++) {
  46. copyWord[k] = copyWord[k + 1];
  47. }
  48. i--;
  49. break;
  50. }
  51. }
  52. }
  53. for (int i = 0; i < size; i++) {
  54. for (int j = 0; j < strlen(consonants); j++) {
  55. if ((copyWord[i] == consonants[j]) || (copyWord[i] == toupper(consonants[j]))) {
  56. size++;
  57. for (int k = size; k > i; k--) {
  58. copyWord[k] = copyWord[k - 1];
  59. }
  60. i++;
  61. break;
  62. }
  63. }
  64. }
  65.  
  66. for (int i = 0; i < size; i++) {
  67. transformedWord[i] = copyWord[i];
  68. }
  69. transformedWord[size] = 0;
  70. return transformedWord;
  71. }
  72.  
  73. char* changeWord(char word[]) {
  74. char* copyWord = word;
  75. if (!(countConsonants(copyWord) >= 4))
  76. copyWord = deleteVowelsdoubleConsonants(word);
  77. return copyWord;
  78. }
  79.  
  80. int main()
  81. {
  82. setlocale(LC_ALL, "Russian");
  83. FILE *input;
  84. freopen_s(&input, "myFile.txt", "r", stdin);
  85. char word[100], * pword = nullptr, *(words[1000]);
  86. int n = 0, i = 0;
  87. int character = 0;
  88. while ((character = getchar()) > 0)
  89. {
  90. if (isLetter(character))
  91. {
  92. pword = word;
  93. i = 0;
  94. while (isLetter(character))
  95. {
  96. *pword = character;
  97. *pword++;
  98. i++;
  99. character = getchar();
  100. }
  101. }
  102. if (pword)
  103. {
  104. pword = nullptr;
  105. words[n] = new char[i + 1];
  106. for (int j = 0; j < i; j++)
  107. words[n][j] = word[j];
  108. words[n][i] = 0;
  109. n++;
  110. }
  111. }
  112. for (int i = 0; i < n - 1; i++)
  113. for (int j = i + 1; j < n; j++) //
  114. if ((countConsonants(words[i]) >= 4) && (countConsonants(words[j]) >= 4) && (words[i][0] < words[j][0]))
  115. {
  116. swap(words[i], words[j]);
  117. }
  118. for (int j = 0; j < n; j++) {
  119. words[j] = changeWord(words[j]);
  120. }
  121. for (int j = 0; j < n; j++) {
  122. cout << words[j] << endl;
  123. }
  124. fclose(input);
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement