Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
Vla00
7 / 7 / 9
Регистрация: 06.10.2012
Сообщений: 545
#1

Поиск в текстовом файле всех слов, заданных в другом текстом файле

10.12.2013, 20:16. Просмотров 1424. Ответов 5
Метки нет (Все метки)

Вообщем такое задание:
Поиск в текстовом файле всех слов, заданных в другом текстом файле;

Не могу понять почему не работает:

C++ (Qt)
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
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <string>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "");
 
    ifstream f_text("text.txt");
    ifstream f_sl("slova.txt");
    if(f_sl)
    {
      string s_sl, s_text;
      while(f_sl >> s_sl)
      {
          if((*(s_sl.end() - 1) == ',') || (*(s_sl.end() - 1) == '.') || (*(s_sl.end() - 1) == ';') || (*(s_sl.end() - 1) == ':'))
          {
              s_sl.erase(s_sl.end() - 1);
          }
 
          while(f_text >> s_text)
          {
              if((*(s_text.end() - 1) == ',') || (*(s_text.end() - 1) == '.') || (*(s_text.end() - 1) == ';') || (*(s_text.end() - 1) == ':'))
              {
                  s_text.erase(s_text.end() - 1);
              }
 
              if(s_sl == s_text)
              {
                  cout<<"Слово: " << s_sl;
                  cout <<"\n";
              }
          }
      }
    }
    else cerr<<"Error";
 
    system("pause");
    return 0;
}
допустим я использую такие файлы:
0
Вложения
Тип файла: txt slova.txt (49 байт, 22 просмотров)
Тип файла: txt text.txt (11.9 Кб, 18 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2013, 20:16
Ответы с готовыми решениями:

Поиск повторяющихся слов в текстовом файле
подскажите есть вот такая задача В файле записаны различные слова через...

Составить словарь всех слов, встречающихся в заданном текстовом файле.
Составить словарь всех слов, встречающихся в заданном текстовом файле. Для...

Сравнение слов в одном файле со словами в другом файле
Здравствуйте! Суть задачи такая: 1. Первый файл - запросы с городами, второй...

В текстовом файле посчитать количество заданных букв
Задание: &quot;В текстовом файле посчитать количество заданных букв&quot; Срочно надо,...

Счетчик слов в текстовом файле
Натолкните пожалуйста на мысль, как может выглядеть консольное приложение,...

5
zss
Модератор
Эксперт С++
7097 / 6628 / 4196
Регистрация: 18.12.2011
Сообщений: 17,475
Завершенные тесты: 1
10.12.2013, 20:21 #2
Для первого слова из потока f_s1 внутренний цикл while перемещает указатель потока f_text в конец .
После чтения следующего слова этот указатель надо вернуть на начало потока.
0
Vla00
7 / 7 / 9
Регистрация: 06.10.2012
Сообщений: 545
11.12.2013, 00:49  [ТС] #3
Цитата Сообщение от zss Посмотреть сообщение
Для первого слова из потока f_s1 внутренний цикл while перемещает указатель потока f_text в конец .
После чтения следующего слова этот указатель надо вернуть на начало потока.
Сделал так как вы сказали:

C++ (Qt)
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
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <string>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "");
 
    ifstream f_text("text.txt");
    ifstream f_sl("slova.txt");
    if(f_sl)
    {
      string s_sl, s_text;
      while(f_sl >> s_sl)
      {
          if((*(s_sl.end() - 1) == ',') || (*(s_sl.end() - 1) == '.') || (*(s_sl.end() - 1) == ';') || (*(s_sl.end() - 1) == ':'))
          {
              s_sl.erase(s_sl.end() - 1);
          }
 
          f_text.seekg(0, ios::beg);
          while(f_text >> s_text)
          {
              if((*(s_text.end() - 1) == ',') || (*(s_text.end() - 1) == '.') || (*(s_text.end() - 1) == ';') || (*(s_text.end() - 1) == ':'))
              {
                  s_text.erase(s_text.end() - 1);
              }
 
              if(s_sl == s_text)
              {
                  cout<<"Слово: " << s_sl;
                  cout <<"\n";
              }
          }
      }
    }
    else cerr<<"Error";
 
    system("pause");
    return 0;
}
Но всё же не работает правильно
0
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
11.12.2013, 01:12 #4
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
    if(f_sl)
    {
      string s_sl, s_text;
      while(f_sl >> s_sl)
      {
          if((*(s_sl.end() - 1) == ',') || (*(s_sl.end() - 1) == '.') || (*(s_sl.end() - 1) == ';') || (*(s_sl.end() - 1) == ':'))
          {
              s_sl.erase(s_sl.end() - 1);
          }
 
          while(f_text >> s_text)
          {
              if((*(s_text.end() - 1) == ',') || (*(s_text.end() - 1) == '.') || (*(s_text.end() - 1) == ';') || (*(s_text.end() - 1) == ':'))
              {
                  s_text.erase(s_text.end() - 1);
              }
 
              if(s_sl == s_text)
              {
                  cout<<"Слово: " << s_sl;
                  cout <<"\n";
              }
          }
          f_text.clear();
          f_text.seekg(0);
      }
    }
    else cerr<<"Error";
1
Vla00
7 / 7 / 9
Регистрация: 06.10.2012
Сообщений: 545
11.12.2013, 15:56  [ТС] #5
всё спасибо. работает правильно... Очень благодарен...
0
Vla00
7 / 7 / 9
Регистрация: 06.10.2012
Сообщений: 545
13.12.2013, 17:49  [ТС] #6
Цитата Сообщение от alsav22 Посмотреть сообщение
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
    if(f_sl)
    {
      string s_sl, s_text;
      while(f_sl >> s_sl)
      {
          if((*(s_sl.end() - 1) == ',') || (*(s_sl.end() - 1) == '.') || (*(s_sl.end() - 1) == ';') || (*(s_sl.end() - 1) == ':'))
          {
              s_sl.erase(s_sl.end() - 1);
          }
 
          while(f_text >> s_text)
          {
              if((*(s_text.end() - 1) == ',') || (*(s_text.end() - 1) == '.') || (*(s_text.end() - 1) == ';') || (*(s_text.end() - 1) == ':'))
              {
                  s_text.erase(s_text.end() - 1);
              }
 
              if(s_sl == s_text)
              {
                  cout<<"Слово: " << s_sl;
                  cout <<"\n";
              }
          }
          f_text.clear();
          f_text.seekg(0);
      }
    }
    else cerr<<"Error";
как можно это переделать для работы с потоками. Мне нужно теперь это задание представить с mutex
0
13.12.2013, 17:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2013, 17:49

Количество слов в текстовом файле
Здравствуйте. Допустим у меня есть текстовый файл, в котором нужно посчитать...

Замена слов в текстовом файле
Нужна помощь, как в текстовом файле изменить слово, например, &quot;Black&quot; на...

Удалить в текстовом файле 1.txt все строки, которые встречаются в текстовом файле 2.txt
например имеется текстовый файл 1.txt c таким содержанием 111 222 333 444...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru