2017-10-11 81 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