Форум программистов, компьютерный форум CyberForum.ru

поиск слова в строке - C++

Восстановить пароль Регистрация
 
Dasha-
 Аватар для Dasha-
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 5
09.11.2013, 16:37     поиск слова в строке #1
Добрый день! Помогите найти ошибку.
Задание длина файла 1000 символов (длина строки 70 символов). Данные из файла занести в структуру с полем строка. Определить порядковый номер заданного слова в каждом предложении текста. По нажатию клавиши поочередно выделять каждое предложение текста, а в выделенном предложении - заданное слово.
Не работает функция поиска. И не знаю как номер слова найти, если строку посимвольно считываю.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <fstream>
#include <string.h>
 
using namespace std;
 
struct file_res
   {  char stroka[70]; //Переменная в которой будет содержимое файла
   };
 
char slovo[15]; //Слово вводимое с клавиатуры
   
char* findword(char* str1, char* str2);
 
 
char* findword(char* str1, char* str2)
{    for (int i = 0; str1[i] != '\0'; i++)
        if (isspace(str1[i])) {//перевірка параметру чи є він символом пробілу.
            char word[256] = "\0", pchars[256] = ".,!";
            for (int n = i+1, k = 0; !isspace(str1[n]) && str1[n] != '\0'; n++)
                if (!strchr(pchars,str1[n])) word[k++] = str1[n];
 
            char* buf = NULL; 
            if ((buf = strstr(word, str2)) != NULL) 
                return buf;
         }
    return NULL;
}
 
 
int main()
{
    int n;
    setlocale( LC_ALL,"RUS");
    char* buf = NULL;
     int size=0;
     file_res F1[1000]; //F1 - Масив структур типу file_res в 999 элементов
     int i=0;
     ifstream myfile("text.dat");
     if(myfile == NULL ) {//Проверка есть ли файл
        cout<<"Файл не знайдено"<<endl;
     return 1;  
     }   
     
     while (!myfile.eof())//Пока не кінець файлу
     {
      myfile.getline(F1[i].stroka,70); //getline-взяти рядок з файлу і занести у структуру
      cout<<F1[i].stroka<<endl; //вивести рядок на екран
      i++;
     }
     size=i-1; //size розмір масиву
     
     cout<<endl<<"Введiть слово: ";
     cin>>slovo;
     
     for(int j = 0; j < size; j++){
       if (findword(F1[j].stroka, slovo)!=NULL) {
        cout<<endl<<" В рядку " <<F1[j].stroka<<endl<<" знайдено слово \'"
              <<buf<<"\' пiд номером "<<j<<endl;
       }
       cout << "Press any key to continue . . ."<<endl;
       getch();
     }
     
     myfile.close();
     cout << "Press any key to exit . . ."<<endl;
     getch();
     return 0;
}
Содержимое файла text.dat
The so-called analytical capabilities of our mind are difficult of a.
Cess an analysis We judge about them only on results We know among o.
Her, that for a man, especially gifted The gift of analysis serves a.
The source of the most living pleasure. Like that as an athlete is p.
Oud of the force and adroitness. An analyst is glad any possibility .
O make clear something or extricate. Every, even and simple task, ca.
Ving sparks from his talent. He adores riddles, rebuses and cryptogr.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.11.2013, 16:37     поиск слова в строке
Посмотрите здесь:

поиск слова в строке C++
C++ поиск слова в строке
поиск слова в строке C++
C++ Поиск слова в строке
C++ C++ поиск слова в строке, игнорируя остальные
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
09.11.2013, 16:59     поиск слова в строке #2
strstr, не?
Dasha-
 Аватар для Dasha-
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 5
09.11.2013, 17:12  [ТС]     поиск слова в строке #3
Спасибо, так на много проще, а номер слова в строке как вывести?

C++
1
2
3
4
5
6
7
for(int j = 0; j < size; j++){
       if (strstr(F1[j].stroka, slovo)!=NULL) {
        cout<<endl<<" В рядку " <<F1[j].stroka<<endl<<" знайдено слово \'" <<slovo<<"\' на позиції "<<j<<endl;
       }
       cout << "Press any key to continue . . ."<<endl;
       getch();
     }
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
09.11.2013, 17:55     поиск слова в строке #4
strstr возвращает указатель на позицию слова в строке.
Dasha-
 Аватар для Dasha-
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 5
09.11.2013, 21:55  [ТС]     поиск слова в строке #5
Как его вывести?

Добавлено через 22 минуты
указатель на подстроку, если нашёлся вывести разницу указателей (позиция в строке), в строке 70 символов, а какая должна быть переменная для указателя и как ее использовать?

Добавлено через 2 часа 18 минут
C++
1
2
3
4
5
6
7
8
9
     for(int j = 0; j < size; j++){
       if (strstr(F1[j].stroka, slovo)!=NULL) {
      char*  p=strstr(F1[j].stroka, slovo);
        cout<<endl<<" В строке " <<F1[j].stroka<<endl<<" слово \'"
              <<slovo<<"\' под номером "<<p<<endl; //выводит буквы, а если написать 70-*p тоже не работает 
         cout << "Press any key to continue . . ."<<endl;
         getch();
       }
     }
Люди помогите, нужно сделать до завтра
Yandex
Объявления
09.11.2013, 21:55     поиск слова в строке
Ответ Создать тему
Опции темы

Текущее время: 05:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru