Advertisement
CLazStudio

q199442479

Mar 30th, 2017
235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.66 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.     int n; // инициализируем n
  8.     cin >> n; // считываем n
  9.  
  10.     char *s = new char[n + 1]; // Создаем динамический массив символов, \
  11.                                   n + 1 т.к. один символ резервируем для '\0'
  12.     cin.ignore(n, '\n'); // чтобы не пропускал считывание строки
  13.     cin.getline(s, n + 1); // считываем символы как строку
  14.  
  15.     int minWord = 0, // позиция первой буквы самого короткого слова
  16.         maxWord = 0, // позиция первой буквы самого длинного слова
  17.         minLen = n, // длина самого короткого слова
  18.         maxLen = 0, // длина самого длинного слова
  19.         len = 0; // текущая длина (нужно в цикле)
  20.  
  21.     // Проходимся по всем символа динамического массива
  22.     // цикл до n включительно, т.к. нужно определять конец строки
  23.     for (int i = 0; i <= n; i++)
  24.     {
  25.         // если текущий символ пробел или символ конца строки
  26.         // Условие выполняется, когда мы находим слово
  27.         if (s[i] == ' ' || s[i] == '\0')
  28.         {
  29.             if (len == 0) continue; // чтобы не было слов нулевой длины
  30.  
  31.             // если найденное слово длинее длинного
  32.             if (len > maxLen)
  33.             {
  34.                 maxWord = i - len;
  35.                 maxLen = len;
  36.             }
  37.  
  38.             // если найденное слово короче короткого
  39.             if (len < minLen)
  40.             {
  41.                 minWord = i - len;
  42.                 minLen = len;
  43.             }
  44.  
  45.             len = 0; // сбрасываем длину текущего слова
  46.         } else len++; // иначе увеличиваем текущую дину на 1
  47.     }
  48.  
  49.     cout << "Min (" << minLen << ") = ";
  50.     for (int i = minWord; i < minWord + minLen; i++)
  51.         cout << s[i]; // посимвольно выводим слово
  52.  
  53.     cout << "\nMax (" << maxLen << ") = ";
  54.     for (int i = maxWord; i < maxWord + maxLen; i++)
  55.         cout << s[i]; // посимвольно выводим слово
  56.  
  57.     delete[] s; // Освобождаем выделенную под динамический массив символов память
  58.     return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement