2012-05-18 73 views
2

據我所知,在C++中投一個字符串轉換爲INT常見的方法是使用sstream:C++清潔字符串爲int投

std::string inputString = "12 34"; 
    std::istringstream istr(inputString); 
    int i1, i2; 
    istr >> i1 >> i2; 

但是,如果我想確認,我的代碼適用於任何輸入,這個問題是一個字符串的輸入或0之間決定:

std::string inputString = "TEXT 0"; 
    std::istringstream istr(inputString); 
    int i1, i2; 
    istr >> i1 >> i2; 
    cout << i1 <<" != "<< i2 << endl; 

我想決定,如果用戶已經inputed字符串或零,以便進行進一步的操作。 有沒有乾淨方式來決定這個問題,而不使用詞法轉換或atoi? 最好gegards

+3

至少對我來說該技術的工作原理,目前還不清楚究竟你正在做出什麼決定,或者(特別是)決定的標準。 –

+3

'if(!(istr >> i1 >> i2)){/ *東西沒有提取* /}' – ildjarn

+0

thx,那個解決方案對我來說似乎很穩定/乾淨 –

回答

1

你可以使用一個無效的默認值:

#include<sstream> 
#include<limits> 
using std::numeric_limits; 
int main(){ 
    std::string inputString = "TEXT 0"; 
    std::istringstream istr(inputString); 
    int i1=numeric_limits<int>::min(); 
    int i2=numeric_limits<int>::min(); 
    std::string tmp; 
    istr >> i1; 
    if (i1 == numeric_limits<int>::min()) { 
     // extraction failed 
     i1 = 0; 
     istr.clear(); // clear error flags to allow further extraction 
     istr >> tmp; // consume the troublesome token 
    } 
    // same for i2 
} 

:如果numeric_limits<int>::min()不能是一個有效的輸入

+0

他不能使用NaN作爲默認值並保持min作爲有效輸入? – dutt

+2

@dutt - 你記得C++'int'變量的NaN是什麼? – Attila

+0

@Jared你的編輯失去了一條關鍵線似乎 – Flexo