На этом шаге мы рассмотрим особенности работы такой программы.
Договоримся, что слово - это любая последовательность символов, не содержащая пробелов, символов табуляции (\t) и новой строки (\n). Наряду с количеством слов программа будет подсчитывать количество символов и строк.
Текст программы приведен ниже:
// Count_Words.cpp: главный файл проекта. #include "stdafx.h" #include <clocale> //обязательно для функции setlocale() using namespace System; #include <conio.h> // для getch() #include <stdio.h> // для getchar(), putchar(), printf() #define eof -1 // признак конца файла Ctrl+Z #define YES 1 // для придания значения переменной in #define NO 0 // для придания значения переменной in int main() { setlocale(LC_ALL,"Russian"); //функция setlocale() с аргументами //для корректного вывода кириллицы int c; //для ввода символа int nc; //для подсчета количества введенных символов int nl; //счетчик строк int nw; //счетчик слов int in; //флажок слежения за тем, находится ли в данный //момент программа внутри слова или нет nc=nl=nw=0; //обнуление счетчиков in = NO; //до ввода находимся вне слова printf("Задайте строку и нажмите Enter >\n"); while((c=getchar()) != eof) { if (c != '\n') //если символ - не конец строки... nc++; //...его надо учитывать в счетчике // (кроме Ctrl+Z и \n) else nl++; //...иначе это конец строки //увеличиваем число строк if (c==' ' || c=='\n' || c=='\t') //если символ хотя бы один из... in = NO; //сколько бы раз ни нажимали на клавиши пробел, //конец строки, табуляция, всегда будем //находиться вне слова else //сюда попадаем только тогда, когда нажали любую клавишу, //кроме пробела, Enter и конца строки if (in == NO) { in = YES; //попали на начало слова nw++; //и слово надо учесть в счетчике } else ; //эта часть выполняется, когда мы, находясь внутри //слова (in != NO) ввели любой символ, кроме //пробела, знака табуляции и знака конца //строки. В этом случае подсчет слов не ведется, //а программа возвращается на ввод //следующего символа } //конец цикла while printf("Строк = %d\n", nl); printf("Слов = %d\n", nw); printf("Символов = %d\n", nc); _getch(); /*вводит символ, но без эхо-сопровождения (для организации задержки экрана) */ return 0; }
Весь ход работы программы ясен из подробного комментария. Стоит обратить внимание на некоторые нововведения:
Результат расчетов приведен на рисунке 1.
Рис.1. Результат работы приложения
Со следующего шага мы начнем знакомиться с массивами.