![]()
|
|||||||
return 0;. using namespace std;. int main(). const int len = 81;. char word[len], line[len], end_word[] = done;. return -1;. while (strcmp(line, end_word));. char delims[] = ,.!? /<>|()*:;\;. char *token;. while (f.getlreturn 0; } Рассмотрим другой подход к решению предложенной выше задачи. В библиотеке C++ есть функция strtok, которая разбивает предложенную строку на лексемы в соответствии с заданным набором разделителей. При ее использовании нет необходимости выделять и проверять начало и конец слова. Потребуется лишь сравнит с искомым словом, слово, выделенное strtok. Для этого просто необходимо задать разделители. Пример 11.4 Поиск вхождения слова в файле с помощью strtok #include "stdafx.h" #include <iostream> #include <fstream> #include <string> using namespace std; int main() { setlocale(LC_ALL, "Russian"); const int len = 81; char word[len], line[len], end_word[] = "done";
//пересоздадим файл и откроем для чтения/записи fstream f("lab11.txt", ios::in | ios::out | ios::trunc); if (!f) { cout << "Ошибка открытия файла" << endl; return -1; } //введем несколько строк для дальнейшего поиска в них do { cin >> line; f << line << endl; } //продолжаем пока не введем done while (strcmp(line, end_word)); cout << "Введите слово для поиска: "; cin >> word;
//сбрасываем бит-признак конца файла eofbit f.clear(); //сбросим файловый поток на начало f.seekg(0); //Список разделителей char delims[] = ",.!? /<>|()*:;\"";
//Указатель на начало слова char *token; //счетчик вхождения слова int wc = 0; //читаем построчно и ищем слово word в строке while (f.getline(line, len)) { //находим первый символ не из разделителей //находим первый символ не из разделителей token = strtok(line, delims); //проверяем, остались ли еще слова while ( token != NULL ) { //strtok заменяет символ после разделителя //на NULL поэтому можно сравнивать искомое и //найденное слово
|
|||||||
|