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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.71
prazuber
108 / 108 / 3
Регистрация: 29.04.2010
Сообщений: 240
#1

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

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

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

Прочитать нужно что-то такое (по словам):
Код
3
this is a test
foobar
all your base
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2011, 21:05     istream и конец строки
Посмотрите здесь:

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

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

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

Переписать все цифры каждой строки файла в конец строки - C++
Содержимое текстового файла INPUT.TXT, разделенного на строки, переписать за один проход по файлу в текстовый файл OUTPUT.TXT, перенося при...

Описать функцию, что добавляет N символов строки S2 в конец строки S1 - C++
Помогите пожалуйста с выполнением лабораторной работы. Задание: 1. Разработать и реализовать функцию на языке С. 2. Провести ее...

Добавить в конец первой строки, последние n2-n1 слов второй строки - C++
помогите пожалуйста! Даны две строки. Пусть n1 - число слов в первой строке, а n2 - во второй (n1<n2). Добавить в конец первой строки,...

Как переместить символ окончания строки /0 в конец строки? - C++
Это мне нужно сделать, чтоб не появлялись кракозябры. Причем сделать для всех строк подключенного к программе файла.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
neske
1474 / 841 / 74
Регистрация: 26.03.2010
Сообщений: 2,889
21.04.2011, 21:07     istream и конец строки #2
C++
1
std::getline (std::cin, s);
Это не подойдет?
asics
Freelance
Эксперт C++
2846 / 1783 / 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++
2846 / 1783 / 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++
2846 / 1783 / 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
Эксперт С++
3042 / 1687 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
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++
2846 / 1783 / 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 и конец строки
Еще ссылки по теме:

Добавить в конец каждой строки необходимо количество «*» что бы выровнять текст по правому краю большей строки - C++
Дано некоторое количество строк, не больше как размер текстового окна. Добавить в конец каждой строки необходимо количество «*» что бы...

Конец строки - C++
Всем привет! В чем ошибка? #include &quot;stdafx.h&quot; #include &quot;iostream&quot; #include &quot;conio.h&quot; #include &quot;string&quot; using namespace...

Не находит конец строки в WinApi - C++
Всем привет. У меня есть такой код: textsize = GetWindowTextLength(hEdit); buf= new TCHAR; GetWindowText(hEdit, buf, textsize) ...

Конец строки в txt файле - C++
Добрый день! Мне нужно считать значения двумерного массива. В txt файле хранятся, например, такие значения. 1 2 3 4 5 6 7 8 9 С...

Запись в конец строки в файле - C++
Ув. форумчане! Подскажите, как дописать в конец строки в файле определенные данные? Например у меня есть файл с уже забитыми данными: ...


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

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

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