Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
178 / 126 / 25
Регистрация: 12.01.2012
Сообщений: 624
1

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

15.07.2012, 19:02. Просмотров 1139. Ответов 11
Метки нет (Все метки)

Формат входной строки должен быть таким:
Слово нужное_нам_число
Например:
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;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.07.2012, 19:02
Ответы с готовыми решениями:

Как красиво игнорировать символы из входного потока?
Здравствуйте! Необходимо игнорировать некие символы до конца строки. Есть два варианта:...

Как передать данные из одного потока в другой?
Есть отдельный поток для чтения данных и основной поток для обработки данных. Из этого потока...

Base64 Как Игнорировать не закодированные данные
Есть функция раскодировки ссылок: $s = base64_decode($s); Работает отлично когда ссылка в base64...

Не скрываются ненужные данные
Делаю мобильную адаптивную версию сайта. Есть небольшие проблемы, надеюсь на вашу помощь Не могу...

11
Каратель
Эксперт С++
6593 / 4014 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
15.07.2012, 19:29 2
C++
1
strStream >> curLine >> k;
без доп. переменных
0
Псевдослучайный
1934 / 1135 / 96
Регистрация: 13.09.2011
Сообщений: 3,204
15.07.2012, 19:35 3
Ну если нам нужно выпилить именно из строки из двух слов первое, можно сделать, например, так:
C++
1
curLine.erase(0, curLine.find(' ') + 1);
1
178 / 126 / 25
Регистрация: 12.01.2012
Сообщений: 624
15.07.2012, 19:37  [ТС] 4
Jupiter, а это не бесконечная рекурсия будет? Страшная и очень опасная конструкция
0
Псевдослучайный
1934 / 1135 / 96
Регистрация: 13.09.2011
Сообщений: 3,204
15.07.2012, 19:40 5
Цитата Сообщение от Buckstabue Посмотреть сообщение
Jupiter, а это не бесконечная рекурсия будет?
Где там вообще рекурсия?Оо
0
178 / 126 / 25
Регистрация: 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;
}
0
Псевдослучайный
1934 / 1135 / 96
Регистрация: 13.09.2011
Сообщений: 3,204
15.07.2012, 19:53 7
stringstream здесь не нужен. Вообще не нужен
0
178 / 126 / 25
Регистрация: 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;
}
0
бжни
2467 / 1676 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
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;
}
1
Каратель
Эксперт С++
6593 / 4014 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
15.07.2012, 20:13 10
Цитата Сообщение от Buckstabue Посмотреть сообщение
Кстати, вот загадка: такой код почему-то работает, а тот что в первом посте нет, хотя отличий почти нет по идее...
потому что стрим копирует строку, а в 1-м посте строка пустая
1
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
15.07.2012, 20:43 11
Buckstabue, в одном месте можно проще и наглядней. Вместо:
C++
1
strStream.str( curLine );
написать:
C++
1
strStream << curLine;
0
178 / 126 / 25
Регистрация: 12.01.2012
Сообщений: 624
15.07.2012, 21:44  [ТС] 12
Jupiter, а я думал он ассоциирует строку с потоком, как в Qt есть TextStream или что-то в этом духе и там гораздо проще работать с потоками, но боюсь Qt на егэ не прокатит, да и без документации тяжело писать
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.07.2012, 21:44

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как получить данные из потока?
Сделал класс в котором опрашиваются все локальные БД. Хочу чтобы данные передавались в UI формы где...

Как получить данные из потока
Здравствуйте, написал функционал для проверки файлов, но т.к. файлов много 5000+и при выполнении...

Как из потока вывести данные на форму
Приветсвую. Раскажите, кто знает. Как из потока вывести данные на форму. Например, вевести...

Как данные из потока поместить в listWidget?
Вопрос довольно глупый, как данные из потока поместить в listWidget? надо что то на подобии такого...


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

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

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