2017-10-11 40 views
0

我想创建一个程序,该程序读取包含两个数字和一个运算符的字符串并打印出结果。它在算术运算符上不断出现错误。例如,我将如何将两个字符串添加到一起?如何对C++中的字符串应用算术运算?

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; 
} 
+2

你在期待'string'除以'string'得到的结果是什么? – Xirema

+0

有什么错误? – user463035818

+0

根据你的代码,没有理由将数字作为字符串,他们为什么? ,因为它们是你需要将它们转换为数字的字符串,如果你想用它们来计算的话。 – xyious

回答

5

您需要将输入类型更改为数字类型,以便读取实际数字,而不是它们的字符串表示形式。如您所见,herestring重载的那些运算符中只有一个是+ - 这是串联字符串。

更改...

string number1; 
string number2; 
string answer; 

...到...

double number1; 
double number2; 
double answer; 

...应该解决您的问题。

或者,您可以像现在这样读取字符串,然后将它们转换为数字(请参见here),但这只是在您不需要它时添加更多的工作。 除非你想检测无效的数值(如1234abc8),在这种情况下读取一个字符串,然后解析和检查无效输入是一个好主意。

+0

是的,我总是迟到1秒,但最终我放弃了更新我的意见;) – user463035818

+0

我可以通过将字符串更改为双数据类型。但是这是一个赋值问题,它通过字符串取两个操作数和一个操作符并执行基本的计算操作。 – Sumair

+0

@Sumair然后看看[this](https://stackoverflow.com/questions/4754011/c-string-to-double-conversion),进行转换。 – hnefatl

0

在您的示例中,number1number2都是字符串,不支持将值相加在一起。你可以简单地切换类型的number1number2以及answer到整数:

int main() 
{ 
    float number1; 
    float number2; 
    string operation; // could switch this to char too 
    float answer; 
    // ... 

如果你真的想使用字符串,你可以使用包含在<sstream> stringstreams: http://www.cplusplus.com/reference/sstream/stringstream/stringstream/

EDIT1:float可能如果您关心的是后浮点值,那么更好的类型。

+0

'int's可能不会产生OP想要除法的结果 – user463035818

+0

基本上这是我在其中面临困难的任务问题。问题是。创建一个读取包含两个数字和一个运算符的字符串并打印结果的程序。该字符串将由您的程序解释。 – Sumair

+0

在这种情况下,您将需要使用stringstreams。 – Folling