Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Листинг 8.1






 

#include < iostream.h>

#include < string.h>

int main()

{

const int len = 81; //1

char word[len], line[len]; //2

setlocale(LC_ALL, " Russian");

cout < < " Введите слово для поиска: "; cin > > word;

 

ifstream fin(" text.txt", ios:: in|ios:: nocreate); //3

if (! fin)

{

cout < < " Ошибка открытия файла." < < endl;

return 1; //4

}

 

while (fin.getline(line, len)) //5

{

if (strstr(line, word)) //6

{

cout < < " Отсутствует! " < < endl;

}

}

cout < < " Отсутствует! " < < endl;

return 0; //7

}

Рассмотрим помеченные операторы. В операторе 1 описывается константа, опре­деляющая длину строки файла и длину последовательности. В операторе 2 описывается переменная 1ine для размещения очередной строки файла и переменная «ord для размещения искомой последовательности символов.

В операторе 3 определяется объект fin класса входных потоков if stream. С этим бъектом можно работать так же, как со стандартными объектами cin и cout, то есть использовать операции помещения в поток «и извлечения из потока».

Предполагается, что файл с именем text. txt находится в том же каталоге, что и текст программы, иначе следует указать полный путь, дублируя символ обратной косой черты, так как иначе он будет иметь специальное значение, например:

ifstream fin(" с: \\prim\\cpp\\text.txt", ios:: in | ios:: nocreate); // 3

 

В операторе 4 проверяется успешность создания объекта fin. Файлы, открываемые для чтения, проверять нужно обязательно! В операторе 5 организуется цикл чте­ния из файла в переменную. line.

Метод get line, описанный выше, при достиже­нии конца файла вернет значение, завершающее цикл.

Для анализа строки в операторе 6 применяется функция strstrd (line, word). Она выполняет поиск подстроки word в строке line. Обе строки должны завершаться нуль-символами. В случае успешного поиска функция возвращает указатель на найденную подстроку, в случае неудачи - NULL. Если вторым параметром переда­ется указатель на строку нулевой длины, функция возвращает указатель на нача­ло строки line.

В качестве тестового примера приготовьте текстовый файл, состоящий из несколь­ких строк. Длина хотя бы одной из строк должна быть равна 80 символам. Для тестирования программы следует запустить ее по крайней мере два раза: введя с клавиатуры слово, содержащееся в файле, и слово, которого в нем нет.

Даже такую простую программу мы рекомендуем вводить и отлаживать по шагам. Предлагаемая последовательность от­ладки:

1. Ввести «скелет» программы (директивы #include, функцию main(), операторы1-4). Добавить контрольный вывод введенного слова. Запустив программу, проверить ввод слова и успешность открытия файла. Выполнить программу, задав имя несуществующего файла, для проверки вывода сообщения об ошибке. Удалить контрольный вывод слова.

2. Проверить цикл чтения из файла: добавить оператор 5 с его завершающей фигурной скобкой, внутри цикла поставить контрольный вывод прочитанной строки:

 

cout «line «endl;

 

Удалить контрольный вывод строки.

3. Дополнить программу операторами проверки и вывода сообщений. Для полной проверки программы следует выполнить ее для нескольких последовательностей. Длина одной из них должна составлять максимально допустимую - 80 символов.


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.007 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал