2012-05-18 55 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