Как предоставить свой собственный разделитель для cin? - PullRequest
6 голосов
/ 04 сентября 2011

В c я могу использовать разделитель новой строки ([^ \ n]) с scanf. С помощью которого я могу хранить строки. Аналогично для cin я могу использовать getline.

Если мне нужно сохранить абзац, я могу смоделировать функциональность, используя мой собственный специальный разделитель символов, например [^ #] или [^ \ t], с функцией scanf в c.

char a[30];
scanf("%[^\#]",a);
printf("%s",a);

Как добиться аналогичной функциональности с помощью объекта cin в cpp.

1 Ответ

14 голосов
/ 04 сентября 2011

istream.getline позволяет указать разделитель для использования вместо значения по умолчанию '\n':

cin.getline (char* s, streamsize n, char delim );

или более безопасный и простой способ - использовать std:: GetLine .С этим методом вам не нужно беспокоиться о выделении буфера, достаточно большого для вашего текста.

string s;
getline(cin, s, '\t');

РЕДАКТИРОВАТЬ:

Так же, как примечание, так как это звучит так, как будто вы простоИзучение c ++ - правильный способ прочитать несколько разделенных строк:

string s;
while(getline(cin, s, '\t')){
    // Do something with the line
}
...