Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Листинг 8.2



#include <fstream.h>

#include <string.h>

#include <ctype.h>

int main()

{

const int len = 81;

char word[len], line[len];

setlocale(LC_ALL, "Russian");

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

cin >> word;

int l word = strlen(word);

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

if (!fin)

{

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

return 1;

}

int count = 0;

while (fin.getline(line,len))

{

char *p = line;

while (p = strstr(p,word))

{

char *c = p;

p += l word; //слово не в начале строки?

if(c!=line) //символ перед словом не разделитель?

if(!ispunct(*(c-1))&&!isspase(*(c-1))) continue;

//символ после слова разделитель?

if(ispunct(*p)||isspase(*p)||(*p=='\0')) count++;

}

}

cout << "Количество вхождений слова:" << count << endl;

return 0;

}

Здесь вводится служебная переменная с для хранения адреса начала вхождения подстроки. Символы, ограничивающие слово, проверяются с помощью функций ispunct и isspace, прототипы которых хранятся в заголовочном файле <ctype.h>. Символ, стоящий после слова, проверяется также на признак конца строки (для случая, когда искомое слово находится в конце строки).

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

- в начале строки;

- в конце строки;

- в середине строки;

- несколько раз в одной строке;

- как часть других слов, находящаяся в начале, середине и конце этих слов;

- в скобках, кавычках и других разделителях.

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

Теперь рассмотрим другой вариант решения этой задачи. В библиотеке есть функция strtok, которая разбивает переданную ей строку на лексемы в соот­ветствии с заданным набором разделителей. Если мы воспользуемся этой функ­цией, нам не придется «вручную» выделять и проверять начало и конец слова, потребуется лишь сравнить с искомым словом слово, выделенное с помощью strtok. Правда, список разделителей придется задать вручную.





Дата публикования: 2015-10-09; Прочитано: 270 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...