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

Поиск слова в тексте. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 58, средняя оценка - 4.69
reiteriX
 Аватар для reiteriX
679 / 235 / 7
Регистрация: 02.04.2009
Сообщений: 692
21.04.2009, 08:01     Поиск слова в тексте. #1
Дан текстовый файл с расширением txt. В нем очень много слов с определениями. Слово и его определение записано в одну строку.

Пример:
слово – его определение
Еще слово – его определение

Нужно чтоб происходил ввод слова с клавиатуры, затем это слово проверялось по блокноту. Если слово в блокноте есть, то вывод всей строки (слово + определение), Если нет такого слова, то сообщение о отсутствие слова в базе.


Я что-то сделал не так, помогите пожалуйста исправить ошибку..


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
#include <iostream>
#include <windows.h>
#include <string.h>
#include <fstream>
 
using namespace std;
 
int main()
{
    char word[256];
    int count=0,i;
 
    ifstream wer("dict.txt");
    if(wer.fail())
    {
        cout<<"Error!"<<endl;
        return 1;
    }
 
    while(!wer.eof())
    {
        wer.getline(word,256);
        count++;
    }
    wer.close();
    ifstream wer2("dict.txt");
 
 
    char ** dict=new char*[count];
    for(i=0;i<count;i++)
    {
        dict[i]=new char[256];
        wer2.getline(dict[i],256);
    }
    wer2.close();
 
    cout<<"Enter word: ";
    cin>>word;
 
    for(i=0;i<count;i++)
        if(strstr(dict[i],word))
            cout<<dict[i];
 
    return 0;
}
Добавлено через 13 часов 34 минуты 44 секунды
странно, ни одного ответа.. это слишком просто?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
jds_07
27 / 26 / 1
Регистрация: 12.03.2009
Сообщений: 85
21.04.2009, 10:38     Поиск слова в тексте. #2
Вставь этот код в цикл проверки массива строк
C++
1
2
3
4
5
6
7
int pos = strpos(dict[i], " -");           // Поиск вхождения подстроки
char* buffer = new char*[pos + 1];  
int k;                                           
for (k = 0; k < pos; i++) {               // Копирование слова
    buffer[k] = dick[i][k];
} 
buffer[k] = '\0';                             // В buffer твое искомое слово
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
21.04.2009, 13:30     Поиск слова в тексте. #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include <iostream>
#include <windows.h>
#include <string.h>
#include <fstream>
 
using namespace std;
 
int main()
{
           char word[256], line[256], tmp[256];
    char *buf = NULL;
    ifstream file;
 
    cout << "Vvedite slovo: ";
    cin.get(word, 256, '\n');
    file.open("dict.txt", ios::in);
    if(!file)
          {
        cout<<"Error!"<<endl;
                       exit(1);
          }
 
    while (!file.eof())
    {
        file.getline(line, 256, '\n');
        strcpy(tmp, line);
        buf = strtok(tmp, " ");
        if (buf == NULL)
        {
            cout << "Error" << endl;
                       file.close();
                       system("pause");
            exit(1);
        }
        if (strcmp(buf, word) == 0)
        {
            cout << line << endl;
            system("pause");
            exit(0);
        }
 
    }
    cout << "Slovo ne naideno" << endl;
    file.close();
    system("pause");
    
    return 0;
}
Для русского шрифта рзультата не гарантирую, но с английским работает.
oxotnik
 Аватар для oxotnik
1584 / 1061 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
21.04.2009, 13:40     Поиск слова в тексте. #4
проще при старте проги загрузить все в map<string, string>, предварительно распарсив строку из файла - словаря на слово и определение. Слово в map-е будет являться ключаом, а определение - значением, а при вводе строки
C++
1
2
3
4
if(map<string, string>::find("введенная строка"))
{
// вывод куда надо
}
hem
 Аватар для hem
2 / 2 / 1
Регистрация: 29.05.2010
Сообщений: 9
29.05.2010, 15:51     Поиск слова в тексте. #5
Вот так вижу+оно ищет много слов:
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
#include <iostream.h>
#include <windows.h>
#include <string.h>
#include <fstream.h>
#include <stdlib.h>
 
int main()
{
    char word[256], line[256], tmp[256];
    char *buf = NULL, **mas;
    int kol=1, ch=0;
    ifstream file;
    cout << "Vvedite slovo: ";
    cin.get(word, 256, '\n');
        for(int i=0; i<strlen(word); i++){
        if(word[i]==' ') kol++;
        }
    mas=new char*[kol];
    for(i=0; i<strlen(word); i++) {
        int mm=0, lop=i;
        while(word[lop]!=' ' && word[lop]!='\n'){
        lop++;
        }
        lop=lop-i;
        mas[ch]=new char[lop];
        while(word[i]!=' ' && word[i]!='\n'){
        mas[ch][mm]=word[i]; mm++; i++;
        }
        mas[ch][mm]='\0';
        ch++;
    }
    int r=0;
    file.open("kurs.txt", ios::in);
    if(!file)
      {
        cout<<"Error!"<<endl;
               exit(1);
      }
while(r<kol){
    while (!file.eof())
    {
        file.getline(line, 256, '\n');
        strcpy(tmp, line);
        buf = strtok(tmp, " ");
        if (buf == NULL)
        {
               cout << "Error" << endl;
               file.close();
               system("pause");
               exit(1);
        }
        if (strcmp(buf, mas[r]) == 0)
        {
            cout << line << endl;
            goto g;
        }
 
    }
    cout << "Slovo ne naideno" << endl;
    g:
    file.clear();
    file.seekg(0,ios::beg);
r++;
}
    file.close();
    system("pause");
    delete mas;
    return 0;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
29.05.2010, 16:06     Поиск слова в тексте. #6
может я чего не понял?
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
#include <iostream>
#include <fstream>
#include <string>
 
int main(){
    std::string buf, to_find;
    char * file_name = "simple.txt";
    long cnt = 0;
    
    std::cout << "Word to find: ";
    std::cin >> to_find;
    
    std::ifstream ifs(file_name);
    if ( ! ifs.is_open() ){
        std::cerr << "Can't open file!" << std::endl;
        return 1;
    }
    
    while ( std::getline(ifs, buf) ){
        if ( buf.find(to_find) != std::string::npos ){
            std::cout << buf << std::endl;
            ++cnt;
        }
    }
    ifs.close();
    
    if ( ! cnt )
        std::cout << "No words found." << std::endl;
    else
        std::cout << "Found " << cnt << " word(s)" << std::endl;
    
    return 0;
}
kazak
29.05.2010, 16:08     Поиск слова в тексте.
  #7

Не по теме:

фига се тему откопали

Yandex
Объявления
29.05.2010, 16:08     Поиск слова в тексте.
Ответ Создать тему
Опции темы

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