Хелпикс

Главная

Контакты

Случайная статья





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;



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.