Программы для работы с символьными данными. Подсчет символов в файле (2-й вариант)

   
На этом шаге мы изменим программу из предыдущего шага.

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

// Count_Sym2.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

int main()
{
	setlocale(LC_ALL,"Russian"); //функция setlocale() с аргументами
                                     //для корректного вывода кириллицы
	double nc;

	printf("Вводимые символы>\n");
	for(nc=0; getchar() !=eof; nc++) ;

	printf("Введено символов: %0.f\n", nc);
	printf("Введено символов: %f\n", nc);

	_getch();  /*вводит символ, но без эхо-сопровождения 
			   (для организации задержки экрана) */
    return 0;
}

Архив проекта можно взять здесь.

   
Для подсчета символов в файле мы применили переменную нового типа double (это длинное float), т. к. таких символов, возможно, окажется больше, чем может поместиться в
переменную, описанную в примере из предыдущего шага. Размер занимаемой памяти для переменной типа double больше или равен, чем для типа float, но меньше или равен, чем для
типа long double. Последний тип совпадает с типом double.

   
В таблице 1 приведены значения размеров памяти для основных типов данных в Microsoft C++.

Таблица 1. Размеры памяти для основных типов данных

ТипРазмер памяти
bool1 байт
char, unsigned char, signed char1 байт
short, unsigned short2 байта
int, unsigned int4 байта
intn8, 16, 32, 64, или 128 битов (зависит от значения n)
long, unsigned long4 байта
float4 байта
double8 байтов
long double8 байтов
long long8 байтов

   
Накапливать по единице мы можем в любой числовой переменной, а не только в переменной типа int. Для обеспечения цикличности ввода символов в этой программе использован цикл for,
работу которого мы ранее рассматривали. В его заголовочной части имеются три выражения:

  • инициализирующее выражение (nc=0) - в этом выражении задаются начальные значения переменных, которые будут участвовать в цикле (в нашем случае - переменная nc);
  • выражение, определяющее условие окончания цикла (getchar() != eof) - в нашем случае цикл окончится, когда будет введен символ комбинации клавиш Ctrl+Z;
  • выражение, определяющее изменение переменной, по которой, как говорят, "идет цикл" - в нашем случае nc++.

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

   
Работа программы будет происходить так: сначала сработает первое заголовочное выражение и переменная цикла nc обнулится. Затем начнет проверяться на истинность/ложность второе
заголовочное выражение. Но чтобы его проверить, надо выполнить функцию getchar(), т. е нажать на клавишу и ввести символ. Только после этого getchar() получит значение, и это
значение будет сравниваться с признаком конца файла. Если проверяемое выражение истинно, то начнет выполняться тело цикла for. Поскольку оно пусто, то управление передастся на вычисление
третьего заголовочного выражения nc++. Для одного введенного символа в nc добавится одна единица. После этого управление передастся на вычисление второго заголовочного
выражения, т. е. придется ввести следующий символ, который будет проверен на признак конца файла. Если введенный символ не соответствует комбинации клавиш Ctrl+Z, то снова будет
выполняться тело цикла и т. д. В конце концов, когда мы нажмем Ctrl+Z, второе заголовочное выражение станет ложным, и цикл for завершит свою работу, управление будет передано
на следующий за циклом for оператор.

   
После этого начнет выполняться оператор вывода printf(). Мы привели в программе два таких оператора, чтобы показать различие в форматах вывода переменной типа double, которая всегда
выдается по формату f. Если формат задан как %0.f, то дробная часть, которая является свойством чисел с плавающей точкой, будет отброшена и число выведется как целое. Если же
задать формат в виде %f, не указав количество цифр в дробной части, то после точки выведется столько цифр, сколько определено по умолчанию.

   
Результат работы программы представлен на рисунке 1.


Рис.1. Результат работы программы

   
Отметим, что программа подсчитывает также вспомогательные символы.

   
На следующем шаге мы рассмотрим программу, подсчитывающую количество строк в файле.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий