Vanilla_Fury

yap_laba_2

Sep 23rd, 2021
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.54 KB | None | 0 0
  1. #include <iostream>
  2. #include <sstream>
  3. #include <vector>
  4.  
  5. #define VOCALS "euioay"
  6.  
  7. std::vector<std::string> getWordsFromStr(std::string str)
  8. {
  9.     std::vector<std::string> vectorWords = {};
  10.     std::istringstream ist(str);
  11.     std::string word;
  12.     while (ist >> word) {
  13.         vectorWords.push_back(word);
  14.     }
  15.    
  16.     return vectorWords;
  17. }
  18.  
  19. std::string deleteNotLatinSymbols(std::string str)
  20. {
  21.     for (int i = 0; i < str.length(); ) {
  22.         if ((str[i] < *"A" or str[i] > *"Z") and (str[i] < *"a" or str[i] > *"z") and str[i] != *" ") {
  23.             str.erase(i, 1);
  24.         } else
  25.         {
  26.             i++;
  27.         }
  28.     }
  29.     return str;
  30. }
  31.  
  32. std::string inputOfStrFromConsole()
  33. {
  34.     std::string str, newStr, word;
  35.     bool isIncorrect;
  36.  
  37.     do
  38.     {
  39.         isIncorrect = false;
  40.        
  41.         getline(std::cin, str);
  42.         newStr = deleteNotLatinSymbols(str);
  43.         if (newStr != str) {
  44.             std::cout << "Строка без лишних символов:\n" << newStr << "\n";
  45.         }
  46.         std::istringstream ist(newStr);
  47.        
  48.         if (!(ist >> word))
  49.         {
  50.             isIncorrect = true;
  51.             std::cout << "\tПожалуйста, введите строку, содержащую слова:\n";
  52.         }
  53.     } while (isIncorrect);
  54.    
  55.     return newStr;
  56. }
  57.  
  58. bool letterIsVocal(char ch)
  59. {
  60.     bool vocalIsNotFound = true;
  61.     ch = tolower(ch);
  62.    
  63.     for (int i = 0; i < strlen(VOCALS) and vocalIsNotFound; i++) {
  64.         if (ch == VOCALS[i]) {
  65.             vocalIsNotFound = false;
  66.         }
  67.     }
  68.     return !vocalIsNotFound;
  69. }
  70.  
  71. bool charIsInString(char ch, std::string str)
  72. {
  73.     bool isNotInString = true;
  74.    
  75.     for (int i = 0; i < str.length() and isNotInString; i++) {
  76.         if (ch == str[i]) {
  77.             isNotInString = false;
  78.         }
  79.     }
  80.     return !isNotInString;
  81. }
  82.  
  83. std::string getVocalsInWord(std::string word)
  84. {
  85.     std::string vocals = "";
  86.     bool vocalIsAlreadyAdded, vocalIsFound;
  87.    
  88.     //find vocals
  89.     for (int i = 0; i < word.length(); i++) {
  90.         vocalIsFound = false;
  91.        
  92.         word[i] = tolower(word[i]);
  93.        
  94.         for (int j = 0; j < strlen(VOCALS) and !vocalIsFound; j++) {
  95.             if (word[i] == VOCALS[j]) {
  96.                 vocalIsFound = true;
  97.                 vocalIsAlreadyAdded = false;
  98.            
  99.                 vocalIsAlreadyAdded = charIsInString(word[i] , vocals);
  100.                
  101.                 if (!vocalIsAlreadyAdded) {
  102.                     vocals += word[i];
  103.                 }
  104.             }
  105.         }
  106.     }
  107.    
  108.     // sort vocals
  109.     char temp;
  110.     if (vocals.length() > 1) {
  111.         for (int i = 0; i < vocals.length(); i++) {
  112.             for (int j = 1; j < vocals.length() - i; j++) {
  113.                 if (vocals[j - 1] > vocals[j]) {
  114.                     temp = vocals[j];
  115.                     vocals[j] = vocals[j - 1];
  116.                     vocals[j - 1] = temp;
  117.                 }
  118.             }
  119.         }
  120.     }
  121.     return vocals;
  122. }
  123.  
  124. void doTask1(std::vector<std::string> vectorWords, std::string lastWord)
  125. {
  126.     std::string vocalsOfLastWord = getVocalsInWord(lastWord);
  127.    
  128.     std::cout << "\n(задание 19.1)\n\tНапечатать все слова, отличные от последнего слова,\n\tв которые входят те же гласные буквы, что и в первое слово.\n\tОтвет:\n\t";
  129.     for (std::string word : vectorWords)
  130.     {
  131.         if (getVocalsInWord(word) == vocalsOfLastWord and word != lastWord) {
  132.             std::cout << word << " ";
  133.         }
  134.     }
  135.     std::cout << "\n\n";
  136. }
  137.  
  138. void doTask2(std::vector<std::string> vectorWords, std::string lastWord)
  139. {
  140.     std::string usedConsonants = "";
  141.    
  142.     std::cout << "\n(задание 19.2)\n\tНапечатать все слова, отличные от последнего слова,\n\tудаляя все согласные буквы, которые уже встречались раньше.\n\tОтвет:\n\t";
  143.     for (std::string word : vectorWords)
  144.     {
  145.         if (word != lastWord)
  146.         {
  147.             for (int i = 0; i < word.length(); )
  148.             {
  149.                 char ch = word[i];
  150.                 if (charIsInString(ch, usedConsonants))
  151.                 {
  152.                     word.erase(i, 1);
  153.                 } else
  154.                 {
  155.                     i++;
  156.                 }
  157.             }
  158.             std::cout << word << " ";
  159.             for (char ch : word) {
  160.                 ch = tolower(ch);
  161.                 if (!letterIsVocal(ch) and !charIsInString(ch, usedConsonants))
  162.                 {
  163.                     usedConsonants += ch;
  164.                 }
  165.             }
  166.         }
  167.     }
  168.     std::cout << "\n\n";
  169. }
  170.  
  171. void doTasks(std::string str)
  172. {
  173.     std::vector<std::string> vectorWords = getWordsFromStr(str);
  174.    
  175.     std::string lastWord = vectorWords.back();
  176.     vectorWords.pop_back();
  177.    
  178.     doTask1(vectorWords, lastWord);
  179.     doTask2(vectorWords, lastWord);
  180. }
  181.  
  182. int main(int argc, const char * argv[])
  183. {
  184.     std::cout << "\nДанная программа принимает строку со словами.\n";
  185.    
  186.     std::cout << "\nВведите строку:\n";
  187.     std::string strInput = inputOfStrFromConsole();
  188.    
  189.     doTasks(strInput);
  190.     std::cout << "\nПрограмма успешно завершена\n";
  191.    
  192.     return 0;
  193.     // abcd bc dthz веинт нвшщтнив 354№.:.№ oio bftdOI uoio GGiOOOiI GGiOOOiI
  194.     // игшмыигы
  195.     // oi OOII ooooooi
  196. }
  197.  
Advertisement
Add Comment
Please, Sign In to add comment