Advertisement
Guest User

ProgrammNumberWords

a guest
Sep 17th, 2014
289
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.70 KB | None | 0 0
  1. #include <iostream> //для ввода и вывода
  2. #include <cstring>  //для функции, определяющей длину строки strlen(str)
  3. #include <cctype>   //для работы с символами (isspace, idigit, ispunct)
  4. using namespace std;
  5.  
  6. /*Суть метода: известно, что в предложении пробелов на один меньше, чем слов. Будем считать число пробелов,
  7. а потом, в зависимости от ситуации, прибавлять или отнимать единицу*/
  8. int main()
  9. {
  10.     char character = 0, str[80];
  11.     int i = 0, numberSpace = 0, rep = 0; //i - счётчик элементов, numberSpace - количество пробелов, rep - количество повторов пробелов
  12.  
  13.     cout << "Input your text: ";
  14.     cin.get(str, 80); //ввод строки
  15.     cin.ignore();
  16.  
  17.     while (str[i] != 0)
  18.     {
  19.         character = str[i];
  20.  
  21.         if (isspace(character)) //если текущий символ - пробел
  22.         {
  23.             numberSpace = numberSpace + 1;  //к общему числу пробелов прибавляем один
  24.         }   //далее описываются особые случаи
  25.  
  26.         if ((str[i + 1] == ' ') && (str[i] == ' ')) //защита от n-количества пробелов
  27.         {
  28.             rep = rep + 1; //прибавляем к счётчику повторов 1
  29.         }
  30.                 if (isdigit(character)) //случай, если введено число
  31.                 {
  32.                     numberSpace = -1;
  33.                     break;
  34.                 }
  35.                 if (isspace(character)&&(ispunct(str[i+1]))) //чтобы не считал знаки препинания словом
  36.                     //если текущий символ - пробел, а после него следует знак пунктуации
  37.                 {
  38.                     numberSpace = numberSpace - 1;
  39.                 }
  40.        
  41.         i = i + 1; //прибавляем 1 к счётчику элементов массива
  42.     }//конец while
  43.     //секция вывода значений
  44.     if (str[0] == ' ') //если первый символ пробел
  45.     {
  46.         cout << "Number of words: " << numberSpace - rep<<endl;
  47.     }
  48.     else
  49.     {
  50.         if (str[strlen(str) - 1] == ' ') //если символ перед '\0' является пробелом
  51.         {
  52.             cout << "Number of words: " << numberSpace - rep << endl;
  53.         }
  54.         else
  55.         {
  56.             if (isdigit(character)) //если есть число
  57.             {
  58.                 cout << "Error! There is a number!" << endl; //пишет
  59.  
  60.             }
  61.             else
  62.  
  63.                 cout << "Number of words: " << numberSpace - rep + 1 << endl; //если текст нормальный (без особых случаев)
  64.         }
  65.     }
  66.  
  67.  
  68.     system("pause"); //задержка экрана
  69.     return 0;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement