我对编程很新,必须创建一个程序来读取提示:“我要花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;,但我无法理解。
提前致谢。
答案 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 ...尝试提取一个数字(int
或double
变量),如果失败,请清除错误位并读取字符串。< / p>
答案 2 :(得分:0)
我没有50个代表,所以我不能发表评论,这就是为什么我把它写成答案。 我想你可以逐个字符地检查它,使用每个字符的Ascii值,&amp;如果有ascii值表示两个空格之间的数字(在这种情况下为两个\ n,因为你已经分隔了每个单词),那么你必须将数字除以2.