3

我们想使用sstream将 string 转换为 int 。

但是我们不知道我们的字符串是否有整数,例如它可以是“hello 200”,我们想要200,或者它可以是“hello”没有解决方案

当我们在字符串中只有一个整数时,我有这个代码:

inline int string_to_int(string s)
{
    stringstream ss(s);
    int x;
    ss >> x;
    return x;
}

现在,如果 s = "你好 200!" 或 s = "hello" ,我们该怎么做?

4

3 回答 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!
}
于 2013-09-21T11:43:36.843 回答
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");

于 2013-09-21T11:31:07.613 回答
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;}
于 2018-02-14T07:32:30.710 回答