|
|||
while (strcmp(line, end_word));do { cin >> line; //с файловым потоком можно работать как со стандартными cin и cout f << line << endl; } //продолжаем пока не введем done while (strcmp(line, end_word)); //сбросим файловый поток на начало f.seekg(0); cout << "Содержимое файла: " << endl; //содержимое файла на экран //выполняем пока не достигнем конца файла while (!f.eof()) { f >> line; cout << line << endl; } cout << "Введите слово для поиска: "; cin >> word;
//сбрасываем бит-признак конца файла eofbit f.clear(); //сбросим файловый поток на начало f.seekg(0); //определим длину искомого слова size_t l_word = strlen(word); //счетчик вхождения слова int wc = 0; //читаем построчно и ищем слово word в строке while (f.getline(line, len)) { //поместим указатель p на начало строки char *p = line; //strstr возвращает указатель // на элемент из строки p с которого начинается word while (p = strstr(p, word)) { //используем указатель не текущую позицию в строке char *c = p;
//переместим p на символ сразу за концом слова p += l_word; //проверим стоит ли наше слово отдельно //или это просто подстрока в другом (большем) слове //проверим совпадает ли начало слова с началом строки if (c != line) //проверим символ перед началом слова //на принадлежность к разделителям if ( !ispunct(*(c-1)) && !isspace(*(c-1)) ) //начинается не с начала строки и //не с разделителя => ищем дальше continue;
//символы перед началом слова подходят //проверяем символы за окончанием слова //если это пробелы, символы пунктуации //или конец строки => увеличиваем счетчик слов if (ispunct(*p) || isspace(*p) || (*p == '\0')) { wc++; cout << "Слово найдено" <<endl; } } } cout << "Количество вхождений слова: "<< wc << endl;
|
|||
|