2016-11-29 6 views
0

文字列を解析し、最初の一連の数字を整数に変換する必要があります。ここでisdigitを使用して文字列からintを抽出する

は関数である。

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 \ n" は。しかし、私は出力174を得ています(印刷と戻り値の両方)。何が起こっている?

おかげで、 キャメロン

+3

ループの最後にi ++があります。 – Danh

+0

ああ!私はこれを1時間以上見つめた。ありがとうございました。 –

+0

より多くのコンパイラの警告を有効にし、このような誤植について警告します。 http://melpon.org/wandbox/permlink/HehPwixnJCTxlcgR –

答えて

1

問題がある:私は本当に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); 
} 

は、私はむしろ

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に出力する必要があるのか​​分かりません。

関連する問題