Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream> //для ввода и вывода
- #include <cstring> //для функции, определяющей длину строки strlen(str)
- #include <cctype> //для работы с символами (isspace, idigit, ispunct)
- using namespace std;
- /*Суть метода: известно, что в предложении пробелов на один меньше, чем слов. Будем считать число пробелов,
- а потом, в зависимости от ситуации, прибавлять или отнимать единицу*/
- int main()
- {
- char character = 0, str[80];
- int i = 0, numberSpace = 0, rep = 0; //i - счётчик элементов, numberSpace - количество пробелов, rep - количество повторов пробелов
- cout << "Input your text: ";
- cin.get(str, 80); //ввод строки
- cin.ignore();
- while (str[i] != 0)
- {
- character = str[i];
- if (isspace(character)) //если текущий символ - пробел
- {
- numberSpace = numberSpace + 1; //к общему числу пробелов прибавляем один
- } //далее описываются особые случаи
- if ((str[i + 1] == ' ') && (str[i] == ' ')) //защита от n-количества пробелов
- {
- rep = rep + 1; //прибавляем к счётчику повторов 1
- }
- if (isdigit(character)) //случай, если введено число
- {
- numberSpace = -1;
- break;
- }
- if (isspace(character)&&(ispunct(str[i+1]))) //чтобы не считал знаки препинания словом
- //если текущий символ - пробел, а после него следует знак пунктуации
- {
- numberSpace = numberSpace - 1;
- }
- i = i + 1; //прибавляем 1 к счётчику элементов массива
- }//конец while
- //секция вывода значений
- if (str[0] == ' ') //если первый символ пробел
- {
- cout << "Number of words: " << numberSpace - rep<<endl;
- }
- else
- {
- if (str[strlen(str) - 1] == ' ') //если символ перед '\0' является пробелом
- {
- cout << "Number of words: " << numberSpace - rep << endl;
- }
- else
- {
- if (isdigit(character)) //если есть число
- {
- cout << "Error! There is a number!" << endl; //пишет
- }
- else
- cout << "Number of words: " << numberSpace - rep + 1 << endl; //если текст нормальный (без особых случаев)
- }
- }
- system("pause"); //задержка экрана
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement