При обработке последовательности символов наиболее часто используются следующие три алгоритма [26]:
§ алгоритм выделения слова из строки;
§ выбор слов, подходящих под шаблон;
§ перевод прописных символов в строчные.
Алгоритм выделения слова из строки
Алгоритм выделения слова из строки заключается в нахождении индекса, соответствующего началу слова (первый не пробельный символ), и индекса первого после окончания слова пробела или признака конца строки (символ ‘\0’). Существование слова гарантируется отличной от нуля разностью между вторым и первым символом.
Листинг 7.1. Определить число слов в тексте, записанном в файле.
//L7_1.cpp
#include <fstream>
#include <iostream>
using namespace std;
int sum_word(char*st);//Прототип функции
int main()
{
int sum=0;
char s[81];
fstream f("input.txt"),f1;
f.getline(s,80); // Читаем строку из файла
while(!f.eof()) // Проверка достижения конца файла
{
sum+=sum_word(s); // Добавляем в сумму число
// слов в текущей строке.
f.getline(s,80); // Чистим следующую строку
}
f.close();
f1.open("input.txt",ios::app); // Открываем файл для пополнения
|
|
f1<<"\n\nЧисло слов в тексте = "<<sum<<'\n';
f1.close();
return 0;
}
// Функция, определяющая число слов в строке:
int sum_word(char *st)
{
int s=0,b,e=0;
while(st[e]!= '\0')
{
// Пропускаем ведущие пробелы:
while(st[e]!= '\0' && st[e] == ' ')
e++;
b=e;
// Пропускаем символы слова:
while(st[e]!= '\0' && st[e]!=' ')
e++;
if(e-b>0) // Слово выделено
s++;
}
return s;
}
Результат работы программы листинга 7.1 приведен на рис. 7.1.
В файле с именем “input.txt” содержится информация о количестве чисел и сами числа.
Необходимо сформировать массив, не содержащий повторяющихся значений.
Этот алгоритм был рассмотрен в главе 1. При работе с файлом он выглядит следующим образом.
Число слов в тексте = 35
Рис. 7.1. Результат работы программы листинга 7.1