Путаница с sscanf в istringstream C++

Я хочу преобразовать следующий код C в C++, используя istringstream:

void test(char *s) {
   int i;
   sscanf(s, "%*s%d", &i);
}

Что у меня есть до сих пор:

void test(char *s) {
   int i;
   istringstream iss(s);
   iss >> s >> i;
}

Выходит с ошибками. Я слишком чужой для istringstream и не могу понять, что делать, чтобы это исправить. Я надеюсь на некоторое понимание моей ошибки. s должен быть строкой и целым числом без пробелов (например, Good123), и я хочу удалить целое число и поместить его в i.


person user1820560    schedule 14.02.2013    source источник


Ответы (1)


Для начала вы должны использовать другую переменную для хранения результирующей проанализированной строки.

void test(char *s) {
   int i;
   string s1;
   istringstream iss(s);
   iss >> s1 >> i;
}
person fons    schedule 14.02.2013
comment
Пробовал это, но затем он сохраняет содержимое s в s1, но int не сохраняется в i. - person user1820560; 14.02.2013
comment
Проблема в том, что, в отличие от sscanf, istringstream ожидает разделитель пробелов. Он хорошо подходит только для очень простого синтаксического анализа (даже проще, чем то, что предлагает sscanf, как кажется). Я бы использовал регулярное выражение. - person fons; 14.02.2013