Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
#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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!