Как мне преобразовать это использование sscanf в cin? - PullRequest
2 голосов
/ 11 февраля 2011

Мне нужно преобразовать эту строку для использования cin.

sscanf(s, "%*s%d", &d);

В чем разница между sscanf и scanf и cin?

1 Ответ

5 голосов
/ 11 февраля 2011

Вы не можете по двум причинам. Во-первых, cout для вывода, а семейство scanf для ввода, но также sscanf анализирует строку, поэтому эквивалент iostream будет istringstream.

Во-вторых, строка формата не может быть сопоставлена. Первая директива (% * s) читает непробельные символы (в виде строки из-за S), а затем отбрасывает их (из-за звездочки). Вторая директива читает int, но любое целое число, которое могло бы присутствовать на этом этапе, уже было бы прочитано и отброшено. После первой директивы у вас больше не будет входных символов, или следующий символ будет пробелом.

Если вместо этого у вас было:

sscanf(s, "%*s %d", &d)

Тогда вы читаете не пробелы, некоторые пробелы, а затем целое число. Самый простой эквивалент этого потока будет:

std::istringstream ss (s);  // Put the initial string s into the stream.
int d;
std::string _;  // Used but then ignored; this is easier than alternatives.
ss >> _ >> d;
...