C ++ stringstream,如果word是数字,则除以2

时间:2013-08-28 05:15:40

标签: c++ stringstream

我对编程很新,必须创建一个程序来读取提示:“我要花8美元。”然后需要在单独的行上打印出每个单词,然后如果任何字符串是数字,则需要将其除以2.因此它应该最终打印为:

I
have
4
dollars
to
spend.

我设法做了所有事情,除了找到数值并将其除以2.到目前为止我有这个:

    #include <iostream>
    #include <string>
    #include <sstream>

    using namespace std;

    int main()
    {
string prompt;
string word;

cout << "Prompt: ";

getline(cin, prompt);

stringstream ss;
ss.str(prompt);

while (ss >> word)
{
cout << word << endl;
}

return 0;
}

在查看了其他各种帖子之后,我无法让这个工作起来。我假设它在while循环中的if / else语句沿着行,如果是数字,则将int num设置为num / 2然后cout&lt;&lt; num&lt;&lt; endl;,否则cout&lt;&lt;单词&lt;&lt; endl;,但我无法理解。

提前致谢。

3 个答案:

答案 0 :(得分:1)

您可以使用stringstream类来处理字符串和其他数据类型之间的转换,以尝试将给定字符串转换为数字。如果尝试成功,你知道 stringstream对象允许您将字符串视为类似于cin或cout的流。

将此结合到您的while循环中,如下所示:

while (ss >> word)
{
int value = 0;
stringstream convert(word); //create a _stringstream_ from a string
//if *word* (and therefore *convert*) contains a numeric value,
//it can be read into an _int_
if(convert >> value) { //this will be false if the data in *convert* is not numeric
  cout << value / 2 << endl;
}
else
  cout << word << endl;

}

答案 1 :(得分:0)

strtol(直接在std::string上运行的C ++ 11版本:std::stol)函数非常适合测试字符串是否包含数字,如果是,那么是什么数值是。

或者你可以像以前那样继续使用iostream ...尝试提取一个数字(intdouble变量),如果失败,请清除错误位并读取字符串。< / p>

答案 2 :(得分:0)

我没有50个代表,所以我不能发表评论,这就是为什么我把它写成答案。 我想你可以逐个字符地检查它,使用每个字符的Ascii值,&amp;如果有ascii值表示两个空格之间的数字(在这种情况下为两个\ n,因为你已经分隔了每个单词),那么你必须将数字除以2.