ifstream эквивалент метода перемотки FILE *

Мне было поручено обновить некоторый код C до C ++, и мне было любопытно, #include int main () {char * line = "[25, 28] => 34"; ...

Я хочу сканировать строки вроде

"[25, 28] => 34"

. Я написал небольшую программу для проверки:

#include <cstdlib>
#include <iostream>

int main() {
        char* line = "[25, 28] => 34";
        char a1[100],  a2[100];
        int i;
        sscanf(line, "[%[^,], %[^\]] => %i", a1, a2, &i);
        std::cout << "a1 = " << a1 <<"\na2 = " << a2 << "\ni = "<<i <<"\n";
        return 0;
}

компиляция дает

warning: unknown escape sequence '\]'

и результат

a1 = 25
a2 = 28
i = -1073746244

. Если я изменю его на

sscanf(line, "[%[^,], %[^]] => %i", a1, a2, &i);

, я получу нет жалоб на компилятор, но все же

a1 = 25
a2 = 28
i = -1073746244

Я знаю, что проблема во втором токене, потому что

sscanf(line, "[%[^,], %[0123456789]] => %i", a1, a2, &i);

дает

a1 = 25
a2 = 28
i = 34

Но я хочу использовать условие завершения для второго токена. Как мне это сделать?

6
задан John Zwinck 21 April 2011 в 22:45
поделиться