Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2011, 21:06   #1
NightEagle
Пользователь
 
Регистрация: 13.03.2011
Сообщений: 31
По умолчанию cin и cin.get

у меня такой вопрос, можно ли с помощью cin.get при вводе строку разбить на отдельные фразы как с помощью оператора cin?

заранее известно сколько слов в фразе...

с помощью сin сделал так:
for (int i=0; i<N; i++)
{
cin>>str;
.............
.............
}

интересует альтернатива с помощью cin.get
заранее спасибо
NightEagle вне форума Ответить с цитированием
Старый 29.03.2011, 21:15   #2
Акоб
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 243
По умолчанию

Почитай про strstr();
Пример из MSDN.
Код:
#include <string.h>
#include <stdio.h>

char str[] =    "lazy";
char string[] = "The quick brown dog jumps over the lazy fox";
char fmt1[] =   "         1         2         3         4         5";
char fmt2[] =   "12345678901234567890123456789012345678901234567890";

void main( void )
{
   char *pdest;
   int  result;
   printf( "String to be searched:\n\t%s\n", string );
   printf( "\t%s\n\t%s\n\n", fmt1, fmt2 );
   pdest = strstr( string, str );
   result = pdest - string + 1;
   if( pdest != NULL )
      printf( "%s found at position %d\n\n", str, result );
   else
      printf( "%s not found\n", str );
}


Output

String to be searched:
   The quick brown dog jumps over the lazy fox
            1         2         3         4         5
   12345678901234567890123456789012345678901234567890

lazy found at position 36
Акоб вне форума Ответить с цитированием
Старый 29.03.2011, 21:26   #3
NightEagle
Пользователь
 
Регистрация: 13.03.2011
Сообщений: 31
По умолчанию

не очень понимаю причём тут strstr
мне нужно просто разбить строку на слова, выкинув пробелы...
NightEagle вне форума Ответить с цитированием
Старый 29.03.2011, 21:36   #4
Акоб
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 243
По умолчанию

аааааааа тогда все гораздо легче.
Код:
#include <string.h>
#include <stdio.h>

char string[] = "A string\tof ,,tokens\nand some  more tokens";
char seps[]   = " ,\t\n";
char *token;

void main( void )
{
   printf( "%s\n\nTokens:\n", string );
   /* Establish string and get the first token: */
   token = strtok( string, seps );
   while( token != NULL )
   {
      /* While there are tokens in "string" */
      printf( " %s\n", token );
      /* Get next token: */
      token = strtok( NULL, seps );
   }
}
Акоб вне форума Ответить с цитированием
Старый 29.03.2011, 21:54   #5
NightEagle
Пользователь
 
Регистрация: 13.03.2011
Сообщений: 31
По умолчанию

моя благодарность))
NightEagle вне форума Ответить с цитированием
Старый 29.03.2011, 22:28   #6
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Акоб
Цитата:
аааааааа тогда все гораздо легче.
тут все еще легче:

Код:
#include <iostream>
#include <sstream>
#include <iterator>
#include <algorithm>

using namespace std;

int main()
{
	string str;
	getline(cin, str);
	stringstream ss(str);
	copy(istream_iterator<string>(ss), istream_iterator<string>(), ostream_iterator<string>(cout, "\n"));
	return 0;
}
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 29.03.2011, 23:33   #7
Акоб
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 243
По умолчанию

Если не трудо обьясни пожалуйста эти строчки.
Код:
stringstream ss(str);
copy(istream_iterator<string>(ss), istream_iterator<string>(), ostream_iterator<string>(cout, "\n"));
Акоб вне форума Ответить с цитированием
Старый 30.03.2011, 00:14   #8
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

открываем строковый поток, основанный на введенной строке str.
с помощью алгоритма copy используя специальные потоковые итераторы копируем данные из потока ввода (в нашем случае он у нас stringstream, но разницы, откуда копировать нет, хоть из cin, хоть из fstream, главное, чтоб он был потоком ввода) в поток вывода (опять же, нет разницы, куда выводить, можно в cout, можно в тот же fstream). а пропуск пробелов, табов и тп это свойство потокового итератора
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 30.03.2011, 18:23   #9
Акоб
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 243
По умолчанию

Круто)Спасибо.
Акоб вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
cin.get в while kaljan775 Общие вопросы C/C++ 6 30.09.2010 14:59
Cin _-Re@l-_ Общие вопросы C/C++ 8 25.06.2010 23:17
cin ReaktiV Общие вопросы C/C++ 3 31.05.2010 15:57
istringstream() и cin>> Amadeo Общие вопросы C/C++ 2 08.04.2010 13:38
cin??? Paul_AG Общие вопросы C/C++ 4 24.04.2009 14:02