6 / 6 / 2
Регистрация: 19.02.2013
Сообщений: 68
1

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

26.02.2013, 00:23. Показов 1789. Ответов 8
Метки нет (Все метки)

Как из строки находязейся в контейнере 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);
    
}
Если нужно могу выложить текст из файла
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.02.2013, 00:23
Ответы с готовыми решениями:

Выделение слова. Строки
Написать программу выделения последнего слова из введенной строки и отображение его на экране....

Выделение последнего слова из строки
Написать программу выделения последнего слова из введенной строки и отображение его на экране....

Выделение последнего слова из введенной строки
Вот задание: написать программу выделения последнего слова из введенной строки и отображение его на...

выделение из строки s m слов, начиная от слова номер n
выделение из строки s m слов, начиная от слова номер n. без использования библиотеки &lt;string.h&gt;

8
2016 / 1615 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
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...
}
//...
1
6 / 6 / 2
Регистрация: 19.02.2013
Сообщений: 68
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* как преобразовать?
0
интересующийся
310 / 281 / 93
Регистрация: 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...
}
//...
0
6 / 6 / 2
Регистрация: 19.02.2013
Сообщений: 68
26.02.2013, 04:12  [ТС] 5
Я уже отчаялся, полдня колдую над прогой а толку 0, все время натыкаюсь на какую-нибудь мелочь...
0
интересующийся
310 / 281 / 93
Регистрация: 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;
}
1
2016 / 1615 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
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.
1
интересующийся
310 / 281 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
26.02.2013, 21:31 8
Цитата Сообщение от rangerx Посмотреть сообщение
Данная функция совершает аварийный выход из программы полностью игнорируя вызов деструкторов созданных объектов. В C++ есть исключения, не следует использовать exit в C++ коде. Тем более, что в данном случае достаточно вызвать return.
А как тогда правильно аварийно выходить из функций (в отличаи от мэйн)?

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

Добавлено через 4 минуты
Цитата Сообщение от xtorne21st Посмотреть сообщение
Странно, а мне почему-то казалось что exit и return делают одно и тоже... нужно будет разобраться с этим как нибудь...
Имеется ввиду в теле функции main()
0
2016 / 1615 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
27.02.2013, 00:10 9
Цитата Сообщение от xtorne21st Посмотреть сообщение
А как тогда правильно аварийно выходить из функций (в отличаи от мэйн)?
Как я и написал, использовать исключения(т.е. генерировать исключительные ситуации).
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.02.2013, 00:10
Помогаю со студенческими работами здесь

Выделение первого слова из введенной строки и отображение его на экране
1) Написать программу выделения первого слова из введенной строки *) и отображение его на экране.

Создать процедуру/функцию SubWord(s,n,l),которая реализует выделение из строки s l слов, начиная от слова номер n
Работа со строками.Создать процедуру/функцию SubWord(s,n,l),которая реализует выделение из строки s...

Выделение последнего слова из введенной строки
Написать программу выделения последнего слова из введенной строки.

Выделение последнего слова из введенной строки
1. Написать программу выделения последнего слова из введенной строки *) и отображение его на...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru