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

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

Войти
Регистрация
Восстановить пароль
 
Vyzov
6 / 6 / 1
Регистрация: 19.02.2013
Сообщений: 64
#1

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

26.02.2013, 00:23. Просмотров 875. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2013, 00:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выделение слова из строки в списке (C++):

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

Выделение последнего слова из строки - C++
Написать программу выделения последнего слова из введенной строки и отображение его на экране. Языковая среда Borland C++ 3.1, но не...

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
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
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* как преобразовать?
0
xtorne21st
интересующийся
304 / 275 / 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...
}
//...
0
Vyzov
6 / 6 / 1
Регистрация: 19.02.2013
Сообщений: 64
26.02.2013, 04:12  [ТС] #5
Я уже отчаялся, полдня колдую над прогой а толку 0, все время натыкаюсь на какую-нибудь мелочь...
0
xtorne21st
интересующийся
304 / 275 / 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;
}
1
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
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
xtorne21st
интересующийся
304 / 275 / 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()
0
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
27.02.2013, 00:10 #9
Цитата Сообщение от xtorne21st Посмотреть сообщение
А как тогда правильно аварийно выходить из функций (в отличаи от мэйн)?
Как я и написал, использовать исключения(т.е. генерировать исключительные ситуации).
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2013, 00:10
Привет! Вот еще темы с ответами:

Напечатать все слова, отличные от последнего слова строки, удалив из каждого слова первую и последнюю буквы - C++
Близиться сессия,а завтра мне сдавать 2 проги. Помогите ребят,могу даже 100 скинуть,если уж так трудно помочь. 8.Задан...

Выделение последнего слова в строке - C++
в текстовом файле содержится инфа об абоненте: Ф.И.О. ,город , улица,номер телефона. определить по номеру телефона абонента. т.е нужно...

Определить количество повторений каждого слова в списке - C++
Создать односвязный линейный список из слов некоторого строки, расположив их в списке по алфавиту. Определить количество повторений каждого...

Найти в списке из 6 слов все слова, заключенные в кавычки - C++
Найти в списке из 6 слов все цитаты, то есть слова, заключенные в кавычки.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.02.2013, 00:10
Ответ Создать тему
Опции темы

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