Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.95/22: Рейтинг темы: голосов - 22, средняя оценка - 4.95
114 / 114 / 13
Регистрация: 29.04.2010
Сообщений: 240
1

istream и конец строки

21.04.2011, 21:05. Показов 4200. Ответов 10
Метки нет (Все метки)

Решая задачу, столкнулся с проблемой - не знаю, как записать следующее: "пока не конец строки, читаем слово". То есть:
C++
1
2
3
string s;
while (??)
  cin>>s;
Буду благодарен за помощь.

Прочитать нужно что-то такое (по словам):
Код
3
this is a test
foobar
all your base
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.04.2011, 21:05
Ответы с готовыми решениями:

Разница между istream::putback и istream::unget
Можете объяснить, пожалуйста, разницу этих двух функций?

istream - считывание определённой строки
Всем привет. Помогите плз. Например у меня есть текстовый файл, в котором написанно: Many Big...

Массив строк. Конец строки и конец массива
\n - перевод на новую строку \0 - конец строки Если у меня массив строк (текст), чем...

Выделение памяти для буффера, под std::istream& operator>>(std::istream &, String &)
Добрый день. Как осуществляется выделения памяти под перегруженный оператор ввода данных в...

10
1549 / 915 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
21.04.2011, 21:07 2
C++
1
std::getline (std::cin, s);
Это не подойдет?
1
Freelance
Эксперт С++
2885 / 1820 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
21.04.2011, 21:08 3
PraZuBeR, Я так понимаю Вам нужно разбить строку на слова ?
1
114 / 114 / 13
Регистрация: 29.04.2010
Сообщений: 240
21.04.2011, 21:14  [ТС] 4
neske, нет, увы.

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

Добавлено через 4 минуты
Конечно, как вариант, читать посимвольно, но может есть более красивое решение?
0
Freelance
Эксперт С++
2885 / 1820 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
21.04.2011, 21:19 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;
}
1
114 / 114 / 13
Регистрация: 29.04.2010
Сообщений: 240
21.04.2011, 21:28  [ТС] 6
asics, спасибо. Еще один вопрос, в вашей программе я не нашел разделения на строки... words_cur_str содержит все слова всех строк, мне же нужно прочитав все слова одной строки, обработать их, и потом читать дальше.
0
Freelance
Эксперт С++
2885 / 1820 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
21.04.2011, 21:37 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;
}
2
114 / 114 / 13
Регистрация: 29.04.2010
Сообщений: 240
21.04.2011, 21:42  [ТС] 8
Да, это оно. Спасибо!
0
Эксперт С++
3211 / 1738 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
21.04.2011, 22:04 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"));
}
0
Freelance
Эксперт С++
2885 / 1820 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
21.04.2011, 22:15 10
Mr.X, ТС`у нужно каждую строку по отдельности обрабатывать, а у Вас все слова всех строк, в одном векторе.
0
Эксперт С++
3211 / 1738 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
21.04.2011, 23:04 11
Цитата Сообщение от asics Посмотреть сообщение
Mr.X, ТС`у нужно каждую строку по отдельности обрабатывать, а у Вас все слова всех строк, в одном векторе.
А, да, не уследил за полетом мысли автора.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.04.2011, 23:04

Parse_matrix(std::istream& in); std::istream& in что это значит?
Есть функция которую необходимо описать: std::pair&lt;int, int&gt; parse_matrix(std::istream&amp; in){ ...

Строки. Если в конце строки точка отсутствует, то найти слово, заканчивающееся точкой и перенести его в конец строки.
Дана строка, состоящая из слов и содержащая одну точку в конце одного из слов. Если в конце строки...

Что значит в окне "стили" у правой границы "а", "конец строки а" и просто "конец строки"
Уважаемый All ! 1. Если открыть окно &quot;стили&quot; (Shift+Ctrl+Alt+S), у правой границы разные стили...

Как первые два символа строки переставить в конец этой строки?
Собственно вопрос


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

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

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