Шаг 22.
Microsoft Visual C++ 2010. Язык С/С++. Программы для работы с символьными данными. Подсчет количества слов в файле

    На этом шаге мы рассмотрим особенности работы такой программы.

    Договоримся, что слово - это любая последовательность символов, не содержащая пробелов, символов табуляции (\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. Результат работы приложения

    Со следующего шага мы начнем знакомиться с массивами.




Предыдущий шаг Содержание Следующий шаг