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

Выделение слова из строки в списке - C++

Восстановить пароль Регистрация
 
Vyzov
6 / 6 / 1
Регистрация: 19.02.2013
Сообщений: 64
26.02.2013, 00:23     Выделение слова из строки в списке #1
Как из строки находязейся в контейнере STL list выделить слово?

условие задачки:
/*Примечание. Во всех вариантах этого задания необходимо использовать контейнерные классы, входящие в состав библиотеки STL.
При необходимости использовать алгоритмы из этой же библиотеки.
1. Строки текстового файла input.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
46
#include <fstream>
#include <iostream>
#include <iomanip>
 
#include <string>
#include <list>
 
#include <algorithm>
#include <iterator>
 
//---------------------------------------------------------------------------
using namespace std;
int main(int argc, char* argv[])
{
setlocale(LC_ALL,"");
list<string> ls;
list<string> ls1;
 
ifstream ifs("input.txt");
if(!ifs) { cerr<<"error"; return 1; }
 
// Чтение из файла
string line;
while(getline(ifs,line) )
    {
        ls.push_back(line);
    }
// Вывод
copy(ls.begin(),ls.end(),ostream_iterator<string>(cout,"\n") );
cout<<endl;
 
list<string>::iterator it;
//ls.c_str();
for(it = ls.begin();it!=ls.end(); it++)//тут я пытаюсь вытащить (хотя бы) первое слово, в массиве прокатило бы.. а в СТЛ нет
{
    for(int i = 0; i<strlen(*it.c_str());i++);
        if (*it[i]!=" ") ls1.push_back(*it[i]);
    
}
 
copy(ls1.begin(),ls1.end(),ostream_iterator<string>(cout,"\n") );
cout<<endl;
 
getchar();
return 0;
}
Так функция выглядела изначально, но это копировало всю строку:
C++
1
2
3
4
5
for(it = ls.begin();it!=ls.end(); it++)
{
        if (*it!=" ") ls1.push_back(*it);
    
}
Если нужно могу выложить текст из файла
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
26.02.2013, 01:51     Выделение слова из строки в списке #2
C++
1
2
3
4
5
6
7
8
9
10
#include <sstream>
//...
string token;
istringstream stream(*it);
while(stream)
{
    stream >> token; 
    // ...далаем что-то с token...
}
//...
Vyzov
6 / 6 / 1
Регистрация: 19.02.2013
Сообщений: 64
26.02.2013, 03:29  [ТС]     Выделение слова из строки в списке #3
Сяб, сейчас попробую.

Добавлено через 1 час 24 минуты

Теперь я вообще плачу
C++
1
2
3
4
5
6
7
8
9
10
for(it = ls.begin();it!=ls.end(); it++)
{
    istringstream stream(*it);
    while(stream)
{
    stream >> token; 
    for(int i = 0; i<strlen(token.c_str());i++){
    if (token[i]!=' '||token[i]!=','||token[i]!='.'||token[i]!='-') strcat(word.c_str(), token.c_str())//тут не работает
    }
}
strcat не принимает в качестве первого параметра const char* как преобразовать?
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
26.02.2013, 03:59     Выделение слова из строки в списке #4
Парвильней былоб делать проверку одновременно с чтеним в поток дабы не произошло чего плохого...
C++
1
2
3
4
5
6
7
8
9
10
#include <sstream>
//...
string token;
istringstream stream(*it);
while((stream >> token) && stream)
{
    
    // ...далаем что-то с token...
}
//...
Vyzov
6 / 6 / 1
Регистрация: 19.02.2013
Сообщений: 64
26.02.2013, 04:12  [ТС]     Выделение слова из строки в списке #5
Я уже отчаялся, полдня колдую над прогой а толку 0, все время натыкаюсь на какую-нибудь мелочь...
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
26.02.2013, 04:14     Выделение слова из строки в списке #6
Цитата Сообщение от Vyzov Посмотреть сообщение
Как из строки находязейся в контейнере STL list выделить слово?
условие задачки:
/*Примечание. Во всех вариантах этого задания необходимо использовать контейнерные классы, входящие в состав библиотеки STL.
При необходимости использовать алгоритмы из этой же библиотеки.
1. Строки текстового файла input.txt состоят из слов, разделенных од-ним или несколькими пробелами.
Перед первым, а также после последнего слова строки пробелы могут отсутствовать. Требуется определить слово, которое чаще всего встречается в файле.
Результат вывести на консоль в форме, удобной для чтения. Длина слова, длина строки и объем исходного файла не ограничены.
*/
Проще всего сделать при помощи map:
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
#include <iostream>
#include <fstream>
#include <map>
#include <string>
#include <cstdlib>
 
int main()
{
    std::string in_file, word;
 
    std::cout << "Input: ";
    std::cin >> in_file;
 
    std::ifstream in(in_file.c_str(), std::ios::in);
    if (!in.good())
    {
        std::clog << "Couldn't open file.\n";
        exit(1);
    }
 
    std::map<std::string, int> clt;
 
    while ((in >> word) && !in.eof())
        ++clt[word];
    in.close();
 
    std::map<std::string, int>::const_iterator max = clt.begin();
    for (std::map<std::string, int>::const_iterator i = clt.begin(); i != clt.end(); ++i)
        if (i->second > max->second)
            max = i;
 
    std::cout << "Word '" << max->first << "' founded " << max->second << " time(s).\n";
    
    return 0;
}
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
26.02.2013, 17:16     Выделение слова из строки в списке #7
Цитата Сообщение от xtorne21st Посмотреть сообщение
Парвильней былоб делать проверку одновременно с чтеним в поток дабы не произошло чего плохого...
Согласен
Цитата Сообщение от xtorne21st Посмотреть сообщение
while((stream >> token) && stream)
Так ты дважды проверяешь одно и то же условие. (stream >> token), это ссылка на поток(по сути, тот же stream).
достаточно
C++
1
while(stream >> token) ...
Цитата Сообщение от xtorne21st Посмотреть сообщение
exit(1);
Данная функция совершает аварийный выход из программы полностью игнорируя вызов деструкторов созданных объектов. В C++ есть исключения, не следует использовать exit в C++ коде. Тем более, что в данном случае достаточно вызвать return.
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
26.02.2013, 21:31     Выделение слова из строки в списке #8
Цитата Сообщение от rangerx Посмотреть сообщение
Данная функция совершает аварийный выход из программы полностью игнорируя вызов деструкторов созданных объектов. В C++ есть исключения, не следует использовать exit в C++ коде. Тем более, что в данном случае достаточно вызвать return.
А как тогда правильно аварийно выходить из функций (в отличаи от мэйн)?

Добавлено через 3 минуты
Странно, а мне почему-то казалось что exit и return делают одно и тоже... нужно будет разобраться с этим как нибудь...

Добавлено через 4 минуты
Цитата Сообщение от xtorne21st Посмотреть сообщение
Странно, а мне почему-то казалось что exit и return делают одно и тоже... нужно будет разобраться с этим как нибудь...
Имеется ввиду в теле функции main()
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2013, 00:10     Выделение слова из строки в списке
Еще ссылки по теме:

C++ Выделение последнего слова из строки
Найти в списке из 7 слов все слова, состоящие из заданного количества букв C++
C++ Найти в списке из 6 слов все слова, заключенные в кавычки

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

Или воспользуйтесь поиском по форуму:
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
27.02.2013, 00:10     Выделение слова из строки в списке #9
Цитата Сообщение от xtorne21st Посмотреть сообщение
А как тогда правильно аварийно выходить из функций (в отличаи от мэйн)?
Как я и написал, использовать исключения(т.е. генерировать исключительные ситуации).
Yandex
Объявления
27.02.2013, 00:10     Выделение слова из строки в списке
Ответ Создать тему
Опции темы

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