Advertisement
daniil_mironoff

ali

Nov 3rd, 2019
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.73 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. bool itSymmetricWord(string word) {
  7.     // Размер слова
  8.     unsigned int sizeWord = word.size();
  9.  
  10.     // Цикл по буквам слова
  11.     for (int i = 0; (sizeWord / 2) > i; i++) {
  12.         // Если буквы не совпали, то слово уже не симметрично
  13.         if (word[i] != word[sizeWord - i - 1]) {
  14.             return false;
  15.         }
  16.     }
  17.  
  18.     return true;
  19.  
  20.     // Допустим sizeWord = 10 (слово asdfggfdsa)
  21.     // и сейчас в цикле i = 2
  22.     //
  23.     // Значит:
  24.     // word[i]                = word[2] = d (as[d]fggfdsa)
  25.     // word[sizeWord - i - 1] = word[7] = d (asdfggf[d]sa)
  26.     //
  27.     // буковки совпали!!! ( ~ happy ~ )
  28.     //
  29.     // p.s. таким способом можешь убедиться,
  30.     //      что алгоритм работает для любых слов
  31.     //      в т.ч. для слов из 1, 2 и нечетного кол-во букв
  32. }
  33.  
  34. int main() {
  35.     string str;                // думаю понятно что это
  36.     cout << "Enter string: ";  // и это
  37.     getline(cin, str);         // это чтобы можно было вводить пробельчики
  38.  
  39.     string word;    // тут храним просто слово, с которым ща работаем
  40.     string maxWord; // тут храним самое большое симетричное слово
  41.  
  42.     // Цикл по символам
  43.     for (char symb : str) {
  44.         // Если наткнулись на пробел, значит слово закончилось и надо бы его обработать
  45.         if (symb == ' ') {
  46.             // Проверка на симетри
  47.             if (itSymmetricWord(word)) {
  48.                 // Если это симметричное слово больше прошлого, то его запоминаем
  49.                 if (word.size() > maxWord.size()) {
  50.                     maxWord = word;
  51.                 }
  52.             }
  53.  
  54.             word.clear(); // слово опустошаем
  55.         }
  56.  
  57.         // Если не пробел, значит слово, записываем буковку
  58.         else {
  59.             word.push_back(symb);
  60.         }
  61.     }
  62.  
  63.     // Если строка закончилась, а слово еще осталось, то его надо дообработать
  64.     if (!word.empty()) {
  65.         if (itSymmetricWord(word)) {
  66.             // Если это симметричное слово больше прошлого, то его запоминаем
  67.             if (word.size() > maxWord.size()) {
  68.                 maxWord = word;
  69.             }
  70.         }
  71.     }
  72.  
  73.  
  74.  
  75.     // Если вообще ни одного симметричного слова
  76.     if (maxWord.empty()) {
  77.         cout << "don't definded symmetric word" << endl;
  78.     }
  79.  
  80.     else {
  81.         cout << "max symmetric word: " << maxWord << endl;
  82.     }
  83.  
  84.  
  85.     return 0;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement