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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
oleg@tor1
32 / 17 / 2
Регистрация: 05.09.2011
Сообщений: 152
#1

Как направить вывод из файла - C++

16.03.2013, 21:28. Просмотров 289. Ответов 8
Метки нет (Все метки)

Господа, подскажите, как быть с такой задачей.

Есть текстовый файл. Допустим, 2 предложения, 10 слов всего. Необходимо каждое слово помещать в массив или вектор (не важно) по отдельности (для дальнейшего сравнения). Выделить слова думаю функцией "strtok", массив, думаю, типа vector <string> V;
Но как использовать strtok, если текст в файле?? freopen ("file_name", "r", stdin) ??
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Why so seriouS
44 / 44 / 1
Регистрация: 12.03.2013
Сообщений: 167
16.03.2013, 21:36     Как направить вывод из файла #2
Можно так:
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
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
 
using namespace std;
 
int main()
{
    ifstream input("1.txt",ios::in);
    vector<string> V;
    if(!input){
               cout<<"Error!";
               return 1;
    }
    while(!input.eof())
    {
           string tmp;
           input >> tmp;
           V.push_back(tmp);
    }
    for(int i = 0;i<V.size();i++)
       cout<<V[i]<<endl;
    system("pause");
}
oleg@tor1
32 / 17 / 2
Регистрация: 05.09.2011
Сообщений: 152
16.03.2013, 22:06  [ТС]     Как направить вывод из файла #3
Да, как вариант, добавить в вектор, дело понятное, тем не менее спасибо за участие.
C++
1
2
3
4
while (!feof(file)) // Заполняем вектор текстом из файла.
{
    V_1.push_back(char(fgetc(file)));
}
но как юзать strtok в таком случае ?
kazak
3033 / 2354 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
16.03.2013, 22:12     Как направить вывод из файла #4
Цитата Сообщение от oleg@tor1 Посмотреть сообщение
но как юзать strtok в таком случае ?
co string'oм никак.
oleg@tor1
32 / 17 / 2
Регистрация: 05.09.2011
Сообщений: 152
16.03.2013, 22:41  [ТС]     Как направить вывод из файла #5
Тогда вопрос.... В вектор слова заносятся вместе с ближайщими знаками препинания, как от них можно избавиться?
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
16.03.2013, 22:52     Как направить вывод из файла #6
пройтись по вектору и обработать каждое слово как надо. обработка будет заключаться в удалении знаков препинания по краям. у std::string все нужное для удаления есть.
еще лучше делать эту обработку перед вставкой в вектор.
oleg@tor1
32 / 17 / 2
Регистрация: 05.09.2011
Сообщений: 152
16.03.2013, 23:02  [ТС]     Как направить вывод из файла #7
Цитата Сообщение от DU Посмотреть сообщение
пройтись по вектору и обработать каждое слово как надо. обработка будет заключаться в удалении знаков препинания по краям. у std::string все нужное для удаления есть.
еще лучше делать эту обработку перед вставкой в вектор.
Будь добр немного подробнее про удалении знаков препинания по краям.

Часть моего кода кода по теме:
C++
1
2
3
4
5
6
7
8
9
10
11
12
    ifstream EDI("text.txt");  // Проверяем открыт ли файл.
if (EDI.is_open() == NULL)
    {
        cout << "Error! There's no file."<< endl;
    }
 
while (!EDI.eof())
{
    string tmp;
    EDI >> tmp;
    V_1.push_back(tmp);
}
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
16.03.2013, 23:24     Как направить вывод из файла #8
ну на коленке примерно так:

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
bool isPunctuation(char ch)
{
    return  ch == '.'
         || ch == ','
         || // тут прочие знаки
         ;
}
 
// ",,.some_string.," - хорошая строка
// "some,string" - плохая строка. останется без изменений.
void removePuntuation(std::string& str)
{
   if (!str.empty() && isPunctuation(*(str.end() - 1))
   {
      str.erase(str.end() - 1);
   }
 
   if (!str.empty() && isPunctuation(*str.begin()))
   {
      str.erase(str.begin());
   }
 
   removePuntuation(str);
}
 
....
 
 
while (!EDI.eof())
{
    string tmp;
    EDI >> tmp;
    removePuntuation(tmp);
    if (!tmp.empty())
    {
      V_1.push_back(tmp);
    }
}
Не компилил, не проверял
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2013, 00:00     Как направить вывод из файла
Еще ссылки по теме:
C++ Вывод из файла
Вывод из файла C++
Вывод из файла C++
Вывод файла C++
вывод из файла C++

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

Или воспользуйтесь поиском по форуму:
oleg@tor1
32 / 17 / 2
Регистрация: 05.09.2011
Сообщений: 152
17.03.2013, 00:00  [ТС]     Как направить вывод из файла #9
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <string>
#include <cctype>
...
std::string str;
std::getline(std::cin, str);
for ( std::string::iterator i = str.begin(); i != str.end(); ++i )
  if ( ispunct(*i) )
    *i = ' ';
Интересно, как применить такой подход к содержимому вектора....
Yandex
Объявления
17.03.2013, 00:00     Как направить вывод из файла
Ответ Создать тему
Опции темы

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