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

Как игнорировать ненужные данные из потока? - C++

Восстановить пароль Регистрация
 
Buckstabue
 Аватар для Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
15.07.2012, 19:02     Как игнорировать ненужные данные из потока? #1
Формат входной строки должен быть таким:
Слово нужное_нам_число
Например:
windows 2012
Нужно из strStream потока присвоить переменной k число, стоящее после слова. В данном случае число 2012. При этом нельзя использовать дополнительные переменные. Как это эффективно и наглядно реализовать? Код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <sstream>
#include <string>
 
using namespace std;
 
int main()
{
   string curLine;
   stringstream strStream( curLine );
   int k = 0;
 
   // здесь надо ввести какое-нибудь слово до 30 символов + пробел + число
   getline( cin, curLine );
//   strStream.ignore( 32, ' ' ); // эта строка не работает как надо :(
   strStream >> k;
 
   cout << "Вы ввели число k = " << k << endl;
   return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6545 / 3965 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
15.07.2012, 19:29     Как игнорировать ненужные данные из потока? #2
C++
1
strStream >> curLine >> k;
без доп. переменных
NoMasters
Псевдослучайный
1740 / 1083 / 70
Регистрация: 13.09.2011
Сообщений: 3,104
15.07.2012, 19:35     Как игнорировать ненужные данные из потока? #3
Ну если нам нужно выпилить именно из строки из двух слов первое, можно сделать, например, так:
C++
1
curLine.erase(0, curLine.find(' ') + 1);
Buckstabue
 Аватар для Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
15.07.2012, 19:37  [ТС]     Как игнорировать ненужные данные из потока? #4
Jupiter, а это не бесконечная рекурсия будет? Страшная и очень опасная конструкция
NoMasters
Псевдослучайный
1740 / 1083 / 70
Регистрация: 13.09.2011
Сообщений: 3,104
15.07.2012, 19:40     Как игнорировать ненужные данные из потока? #5
Цитата Сообщение от Buckstabue Посмотреть сообщение
Jupiter, а это не бесконечная рекурсия будет?
Где там вообще рекурсия?Оо
Buckstabue
 Аватар для Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
15.07.2012, 19:48  [ТС]     Как игнорировать ненужные данные из потока? #6
NoMasters, и вправду нет тут никакой рекурсии и в помине. Решил твоим способом решить, хотя выглядит он не очень казисто, но лучше чем ничего. Код таков
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 <sstream>
#include <string>
 
using namespace std;
 
int main()
{
   string curLine;
   stringstream strStream;
   int k = 0;
 
   // здесь надо ввести какое-нибудь слово до 30 символов + пробел + число
   getline( cin, curLine );
   curLine.erase( 0, curLine.find(' ') + 1 );
   strStream.str( curLine );
   strStream >> k;
 
   cout << "Вы ввели число k = " << k << endl;
   return 0;
}
NoMasters
Псевдослучайный
1740 / 1083 / 70
Регистрация: 13.09.2011
Сообщений: 3,104
15.07.2012, 19:53     Как игнорировать ненужные данные из потока? #7
stringstream здесь не нужен. Вообще не нужен
Buckstabue
 Аватар для Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
15.07.2012, 20:00  [ТС]     Как игнорировать ненужные данные из потока? #8
Я просто завтра ЕГЭ по информатике сдаю, а там особенно популярен построчный ввод. Кстати, вот загадка: такой код почему-то работает, а тот что в первом посте нет, хотя отличий почти нет по идее...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <sstream>
#include <string>
 
using namespace std;
 
int main()
{
   string curLine;
   stringstream strStream;
   int k = 0;
 
   // здесь надо ввести какое-нибудь слово до 30 символов + пробел + число
   getline( cin, curLine );
//   curLine.erase( 0, curLine.find(' ') + 1 );
   strStream.str( curLine );
   strStream.ignore(32, ' ');
   strStream >> k;
 
   cout << "Вы ввели число k = " << k << endl;
   return 0;
}
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
15.07.2012, 20:04     Как игнорировать ненужные данные из потока? #9
Цитата Сообщение от Buckstabue Посмотреть сообщение
windows 2012
C++
1
2
3
4
5
int value;
if (1 != scanf ("%*s %d", &value)) {
  std::cerr << "error" << std::endl;
  return -1;
}
Jupiter
Каратель
Эксперт C++
6545 / 3965 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
15.07.2012, 20:13     Как игнорировать ненужные данные из потока? #10
Цитата Сообщение от Buckstabue Посмотреть сообщение
Кстати, вот загадка: такой код почему-то работает, а тот что в первом посте нет, хотя отличий почти нет по идее...
потому что стрим копирует строку, а в 1-м посте строка пустая
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.07.2012, 20:43     Как игнорировать ненужные данные из потока? #11
Buckstabue, в одном месте можно проще и наглядней. Вместо:
C++
1
strStream.str( curLine );
написать:
C++
1
strStream << curLine;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2012, 21:44     Как игнорировать ненужные данные из потока?
Еще ссылки по теме:

C++ Вызывть метод одного потока из другого потока
C++ Палиндром: игнорировать пробелы
Как красиво игнорировать символы из входного потока? C++
Как в CodeBlocks отключить ненужные варнинги? C++
Игнорировать С2039 C++

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

Или воспользуйтесь поиском по форуму:
Buckstabue
 Аватар для Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
15.07.2012, 21:44  [ТС]     Как игнорировать ненужные данные из потока? #12
Jupiter, а я думал он ассоциирует строку с потоком, как в Qt есть TextStream или что-то в этом духе и там гораздо проще работать с потоками, но боюсь Qt на егэ не прокатит, да и без документации тяжело писать
Yandex
Объявления
15.07.2012, 21:44     Как игнорировать ненужные данные из потока?
Ответ Создать тему
Опции темы

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