'程序'是接收输入然后将字符串吐出在单独的行上,在这种情况下所有数字都要乘以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;
}
}
希望这是我看不到的小事! 感谢先进的帮助。
答案 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;
}