检查字符串是否为数字,然后将该数字转换为int?

时间:2017-08-23 23:39:31

标签: c++

'程序'是接收输入然后将字符串吐出在单独的行上,在这种情况下所有数字都要乘以2。

在空格后输入数字时出现问题。 实施例

Sentence: 12 fish

输出:

24     
fish

但是...

Sentence: there are 12

输出:

there
are
0

我写的程序:

#include <iostream>
#include <string>
#include <sstream>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
using namespace std;

int main()
{
    string str;
    int number = 811;
    cout << "Sentence: ";
    getline(cin,str);

    istringstream iss(str);

     while(iss)
     {
            bool ree = 0;
            string word;
            iss >> word;

            if(isdigit(word[0]))
            {
                stringstream(str) >> number;
                number = (number * 2);
                cout << number << endl;
                ree = 1;
                number = 911;
            }

           if(!ree)
           {
            cout << word << endl;
           }

           ree = 0;

      }
}

希望这是我看不到的小事! 感谢先进的帮助。

3 个答案:

答案 0 :(得分:6)

问题在于

stringstream(str) >> number;

从初始句子创建一个新的字符串流,然后尝试从中提取到number。当然会失败(因为句子中的第一个单词不是数字)。如果你想知道为什么number被设置为0,那是因为失败时,stringstream::operator>>将参数归零(从C ++ 11开始)。

  

如果提取失败,则将零写入值并设置failbit。”...

在C ++ 11之前,它使参数保持不变。有关详细信息,请参阅documentation

正确的方法是使用从字符串到int(或long)的转换,即std::stoi,然后用

替换该行
try{
    number = std::stoi(word); 
}
catch(std::exception& e){
    std::cout << "error converting" << '\n';
}

答案 1 :(得分:0)

使用stoi解析输入,如下所示:

int num = std::stoi(input);

答案 2 :(得分:0)

使用stoi非常简单,您可以通过以下方式懒惰地捕获异常:

if(!stoi(string)){
    std::cout << "caught a non integer string" << endl;
}