2013-02-18 4 views
2

Мы знаем, что для чтения из входного потока, мы можем использовать ниже стандартной функцииC++ iostream чтения с ограничителем НЕСКОЛЬКИХ байт

istream& getline (char* s, streamsize n, char delim); 

C++ Однако мы можем обеспечить только разделитель один байт/символ.

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

Bests,
Lyn

+1

подталкивания Дух будет одна возможность. –

+0

@JerryCoffin Да. Но только если у вас есть время. –

+0

@JerryCoffin, @MarkGarcia, спасибо за ваши слова! Не могли бы вы дать простой пример его использования? Я не очень хорошо знаком с этим, спасибо! – Lyn

ответ

1

Я думаю, что вы можете использовать cin.get() вместо cin.getline(). Каждый раз читайте один символ и проверяйте, существует ли разделитель.

INT основной (аннулируются) {

string str; 
int length_of_delimiter = 3; 
const char *delimiter = "ABC"; 
char temp = '0'; 
bool over = false; 
cout<<"Enter the stream"<<endl; 

temp = cin.get(); 
int i = 0; 
while(over == false){ 
     for(i = 0; temp == delimiter[i] && i < length_of_delimiter; i++){ 
      str += temp; 
      temp = cin.get(); 
     } 
     if(i == length_of_delimiter){ 
      //chop off the delimiter 
      str.erase(str.end() - length_of_delimiter, str.end()); 
      over = true; 
     } 
     else { 
      str += temp; 
      temp = cin.get(); 
     } 
} 
cout<<"The stream we wanted is: "<<str<<endl; 
return 0; 

}

+0

вам нужно проверить, есть ли данные перед каждым чтением с помощью 'cin.good()' например. – UmNyobe

+0

@UmNyobe. Ты прав. Огромное спасибо. –

+0

Я согласен с тобой, это мое окончательное решение. – Lyn

Смежные вопросы