C ++ std :: ifstream для чтения строковых разделителей - PullRequest
2 голосов
/ 23 мая 2011

При использовании:

string s;
cin >> s;

Какие символы могут содержать строки, а какие останавливают чтение строки.

Ответы [ 2 ]

9 голосов
/ 23 мая 2011

std::ctype_base::space - это разделитель для std::istream, который останавливает чтение следующего символа из источника.

std::ctype_base::space относится к пробелам и переводу строки.Это означает, что s может содержать любой символ, кроме пробелов и новой строки, при чтении с использованием cin>>s.

Если вы хотите прочитать также всю строку, содержащую пробелы, вы можете использовать getline() функция, которая использует символ новой строки в качестве разделителя.Также существует перегруженная функция, которую вы можете использовать, если хотите указать свой собственный разделитель. Подробнее см. В документации .


Вы также можете использовать настроенный языковой стандарт , который можно установить на std::istream.Ваша настроенная локаль может определять набор символов, которые будут обрабатываться как разделитель std::istream.Вы можете увидеть один такой пример здесь (см. Мое решение):

Правильный способ разбить std :: string на вектор

3 голосов
/ 23 мая 2011

Разделителем является любой символ ch, для которого std::isspace( ch, std::sin.getlocale() ) возвращает true. Другими словами, что угодно пропитанный язык считает «пустым пространством». (Хотя я бы Считайте это оскорблением, я знаю программистов специальные локали, которые учитывают, например, , пустое пространство и использование >> для чтения списка через запятую.)

...