2016-11-29 6 views
0

Мне нужно разобрать строку и преобразовать первую строку цифр в целое число.извлечение int из строки с использованием isdigit

Вот функция:

int get_int (string to) { 
    string temp = ""; 
    for (int i = 0 ; i < to.length(); i++) { 
     if (isdigit((unsigned char)to[i])) { 
      cerr << to[i]; 
      temp = temp+to[i]; 
     } 
     i++; 
    } 
    return stoi(temp); 
} 

и я передаю его: "тест: 19764 \ п". Тем не менее, я получаю вывод 174 (как в печатном, так и в возвращаемом значении). Что происходит?

Спасибо, Cameron

+3

Обратите внимание на i ++ в конце цикла – Danh

+0

Ах! Я смотрел на это более часа. Спасибо. –

+0

Включите больше предупреждений компилятора, и он будет предупреждать вас об ошибках, подобных этому. http://melpon.org/wandbox/permlink/HehPwixnJCTxlcgR –

ответ

1

Проблема в том: дополнительное условие приращение

int get_int (string to) { 
    string temp = ""; 
    for (int i = 0 ; i < to.length(); i++) { <-- 
    if (isdigit((unsigned char)to[i])) { 
     cerr << to[i]; 
     temp = temp+to[i]; 
    } 
    i++; <-- 
    } 
return stoi(temp); 
} 

Если бы я действительно должен был сделать это с помощью isdigit я пошел бы с чем-то вдоль линий

int get_int(string to) { // Assumes a base10 representation 
    int value = 0; 
    for (int i = 0; i < to.length(); ++i) { 
    if (isdigit(to[i])) { 
     cerr << to[i]; 
     value = value * 10 + (to[i] - 0x30); 
    } 
    } 
    return value; 
} 

Не знаете, зачем вам выводить цифры на cerr.