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

istream и конец строки - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.71
prazuber
108 / 108 / 3
Регистрация: 29.04.2010
Сообщений: 240
21.04.2011, 21:05     istream и конец строки #1
Решая задачу, столкнулся с проблемой - не знаю, как записать следующее: "пока не конец строки, читаем слово". То есть:
C++
1
2
3
string s;
while (??)
  cin>>s;
Буду благодарен за помощь.

Прочитать нужно что-то такое (по словам):
Код
3
this is a test
foobar
all your base
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
21.04.2011, 21:07     istream и конец строки #2
C++
1
std::getline (std::cin, s);
Это не подойдет?
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
21.04.2011, 21:08     istream и конец строки #3
PraZuBeR, Я так понимаю Вам нужно разбить строку на слова ?
prazuber
108 / 108 / 3
Регистрация: 29.04.2010
Сообщений: 240
21.04.2011, 21:14  [ТС]     istream и конец строки #4
neske, нет, увы.

asics, да, но не одну.

Добавлено через 4 минуты
Конечно, как вариант, читать посимвольно, но может есть более красивое решение?
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
21.04.2011, 21:19     istream и конец строки #5
PraZuBeR, Незнаю красиво ли, но думаю пойдет
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <iterator>
 
int main(){
  std::vector<std::string> strings((std::istream_iterator<std::string>(std::cin)),
                                    std::istream_iterator<std::string>());
  /*Для окончания ввода Ctrl + Z(в линухе - Ctrl + D) потом Enter
  Сформовав вектор строк, в цыкле розбиваем каждую строку из вектора на слова*/
  for(size_t i = 0; i < strings.size(); ++i){
    std::istringstream ist(strings[i]);
    std::vector<std::string> words_cur_str((std::istream_iterator<std::string>(ist)),
                                            std::istream_iterator<std::string>());
    //words_cur_str содержит слова текущей строки(при условие, что разделители - пробелы)
  }
  return 0;
}
prazuber
108 / 108 / 3
Регистрация: 29.04.2010
Сообщений: 240
21.04.2011, 21:28  [ТС]     istream и конец строки #6
asics, спасибо. Еще один вопрос, в вашей программе я не нашел разделения на строки... words_cur_str содержит все слова всех строк, мне же нужно прочитав все слова одной строки, обработать их, и потом читать дальше.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
21.04.2011, 21:37     istream и конец строки #7
Немного ошибся, вернее будет так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <iterator>
 
int main(){
  std::string tmp;
  std::vector<std::string> strings;
  while(getline(std::cin, tmp))
    strings.push_back(tmp);
  for(size_t i = 0; i < strings.size(); ++i){
    std::istringstream ist(strings[i]);
    std::vector<std::string> words_cur_str((std::istream_iterator<std::string>(ist)),
                                            std::istream_iterator<std::string>());
    for(size_t j = 0; j < words_cur_str.size(); ++j)
      std::cout << words_cur_str[j] << '\n';
    std::cout << "\n\n\n";
  }
  return 0;
}
prazuber
108 / 108 / 3
Регистрация: 29.04.2010
Сообщений: 240
21.04.2011, 21:42  [ТС]     istream и конец строки #8
Да, это оно. Спасибо!
Mr.X
Эксперт С++
 Аватар для Mr.X
2805 / 1581 / 248
Регистрация: 03.05.2010
Сообщений: 3,684
21.04.2011, 22:04     istream и конец строки #9
asics, что-то вы малость усложнили.
Вот так работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
#include <vector>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string         T_str;
typedef std::vector<T_str>  T_strings;
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    T_strings  strings( (std::istream_iterator<std::string>(std::cin)),
                         std::istream_iterator<std::string>() );
 
    std::copy(strings.begin(), strings.end(), 
              std::ostream_iterator<T_str>(std::cout, "\n"));
}
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
21.04.2011, 22:15     istream и конец строки #10
Mr.X, ТС`у нужно каждую строку по отдельности обрабатывать, а у Вас все слова всех строк, в одном векторе.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2011, 23:04     istream и конец строки
Еще ссылки по теме:

Выделение памяти для буффера, под std::istream& operator>>(std::istream &, String &) C++
Конец строки в txt файле C++
Массив строк. Конец строки и конец массива C++

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

Или воспользуйтесь поиском по форуму:
Mr.X
Эксперт С++
 Аватар для Mr.X
2805 / 1581 / 248
Регистрация: 03.05.2010
Сообщений: 3,684
21.04.2011, 23:04     istream и конец строки #11
Цитата Сообщение от asics Посмотреть сообщение
Mr.X, ТС`у нужно каждую строку по отдельности обрабатывать, а у Вас все слова всех строк, в одном векторе.
А, да, не уследил за полетом мысли автора.
Yandex
Объявления
21.04.2011, 23:04     istream и конец строки
Ответ Создать тему
Опции темы

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