将字符串转换为整数使用 sstream。

3
我们希望使用sstream将字符串转换为整数。
但是我们不知道我们的字符串是否为整数,例如它可能是“hello 200”,而我们想要其中的200,或者它可能是“hello”,那么就没有解决方案!
当字符串中只有一个整数时,我有以下代码:
inline int string_to_int(string s)
{
    stringstream ss(s);
    int x;
    ss >> x;
    return x;
}

现在,如果s =“hello 200!”或s =“hello”,我们该怎么做呢?
3个回答

4
一个简单的方法,它忽略字符串中第一个整数之前的任何无效输入:
bool string_to_int(string str, int &x)
{
    istringstream ss(str);

    while (!ss.eof())
    {
       if (ss >> x)
           return true;

       ss.clear();
       ss.ignore();
    }
    return false; // There is no integer!
}

1

基于有限状态机编写解析器,并根据需要更正任何输入:

int extract_int_from_string(const char* s) {
   const char* h = s;
   while( *h ) {
      if( isdigit(*h) )
         return atoi(h);
      h+=1;
   }
   return 0;

} ... int i = extract_int_from_string("hello 100");

} ... int i = extract_int_from_string("hello 100");


我们不需要在字符串中索引整数吗? - Amirhossein Mahdinejad
我不确定我是否正确理解了你的问题。你是什么意思? - AnatolyS

0
 //You can use the following function to get the integer part in your string...
    string findDigits(string s){
    string digits="";
    int len=s.length();
    for(int i=0;i<len;i++){
        if(s.at(i)>='0' && s.at(i)<='9')
        digits+=s[i];}
     return digits;}

// and call the above function inside this function below...
    int string_to_int(string s){
    string digits=findDigits(s);
    stringstream ss(digits);
    int x;
    ss >> x;
    return x;}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接