我想创建一个程序来读取包含两个数字和一个运算符的字符串并打印出结果。它不断显示算术运算符的错误。例如,我如何将两个字符串一起添加?
int main()
{
string number1;
string number2;
string operation;
string answer;
cout << "Enter numbers with respective operations";
cout << "number 1";
cin >> number1;
cout << "number2";
cin >> number2;
cout << "operation";
cin >> operation;
if (operation == "+")
{
answer = number1 + number2;
cout << "the sum is " << answer << endl;
}
else if (operation == "-")
{
answer = number1 - number2;
cout << "the difference is " << answer << endl;
}
else if (operation == "*")
{
answer = number1 * number2;
cout << "the product is " << answer << endl;
}
else if (operation == "/")
{
answer = number1 / number2;
cout << "the answer is " << answer << endl;
}
else
{
cout << "invalid input" << endl;
}
getchar();
return 0;
}
答案 0 :(得分:5)
您需要将输入类型更改为数字类型,因此您需要读取实际数字,而不是字符串表示形式。正如您所看到的here,string
重载的运算符中唯一一个是+
- 并且用于串联字符串。
更改...
string number1;
string number2;
string answer;
...到...
double number1;
double number2;
double answer;
...应该解决你的问题。
或者,您可以像现在一样阅读字符串,然后将其转换为数字(请参阅here),但这只是在您不需要时添加更多工作。 除非您要检测无效数值(例如1234abc8
),在这种情况下读取字符串然后解析并检查无效输入是个好主意。
答案 1 :(得分:0)
示例中的number1
和number2
都是字符串,不支持将值一起添加。您只需将number1
和number2
以及answer
的类型切换为整数:
int main()
{
float number1;
float number2;
string operation; // could switch this to char too
float answer;
// ...
如果您真的想使用字符串,可以使用<sstream>
中包含的字符串流:
http://www.cplusplus.com/reference/sstream/stringstream/stringstream/
Edit1:float
可能是更好的类型,如果你关心后浮点值。