Книга: Язык Си - руководство для начинающих

ПРОГPAMMA ПОДСЧЕТА СЛОВ

ПРОГPAMMA ПОДСЧЕТА СЛОВ

     Теперь у нас есть возможности для написания программы подсчета числа слов в тексте. (Она может также подсчитывать символы строки.) Решающим моментом является разработка способа, с помощью которого программа будет распознавать слова. Мы будем придерживаться сравнительно простого подхода и определим слово как последовательность символов, которая не содержит "пуcтых символов". Поэтому "glymxck" и "r2d2" - это слова. Пeременная word будет использоваться для хранения указания о том, является ли введенный символ частью данного слова или началом следующего. Появление "пустого символа" (которым может быть пробел, табуляция или "новая строка") служит признаком конца слова. Тогда следующий "непустой" символ будет означать начало нового слова, и мы сможем увеличить значение счетчика слов на 1.

Вот эта программа:

#include

 #define YES 1

#define NO 0

main( )

{

   int ch;   /* введенныйсимвол*/

long nc = 0L;   /* число символов */

int n1 = 0;   /* число строк */

int nw = 0;   /* число слов */

int word = NO;   /* = = YES, если содержимое ch - часть слова */

while((ch = getchar( )) != EOF)

{

 nc++ ;   / * подсчет символов * /

  if (ch = = 'n' ) nl++;   /* подсчет строк */

  if (ch != '  ' && ch != 'n'  &&  ch !='t'  && word ==NO)

    {

        word = YES;   /* начало нового слова  */

        nw++;   /* подсчет слов */

    }

if ((ch = = '  ' ||  ch = = 'n'  ||  ch = = 't' ) && word == YES)

    word = NO; /* достигнут конец слова */

}

printf(" символов  = %1d, слов = %d, строк = %dn", nc, nw, nl);

}

     Поскольку существуют три различных "пустых символа", мы должны использовать логические операции для проверки всех трех возможностей. Рассмотрим, например, следующую строку:

if(ch != ' ' && ch != 'n'  && ch != 't ' && word == NO).

     В ней говорится: "если содержимое ch - не пробел, и не новая строка, и не табуляция, и не первый символ слова". (Первые три условия эквивалентны проверке, не является ли содержимое ch пустым символом). Выполнение всех четырех условий служит признаком начала нового слова, и значение переменной nw увеличивается. Если мы в середине слова, то первые три условия оказываются вы полненными, но значением переменной word окажется признак YES, и значение переменной nw не увеличивается. Когда в процессе ввода встретится очередной "пустой" символ, переменной word будет вновь присвоен признак NO.

     Просмотрите программу и проверьте, правильно ли она интерпретирует случаи, когда между словами находится несколько "пустых" символов подряд.

     Если вы захотите применить эту программу для работы с файлами, используйте операции переключения.

Оглавление книги


Генерация: 1.292. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз