華為筆試——C++字符串四則運算的實現


題目:字符串四則運算的實現

有字符串表示的一個四則運算表達式,要求計算出該表達式的正確數值。四則運算即:加減乘除"+-*/",另外該表達式中的數字只能是1位(數值范圍0~9),運算不用括號。另若有不能整除的情況,按向下取整處理,eg: 8/3得出值為2。

舉例:字符串"8+7*2-9/3",計算出其值為19。

考點:數字的字符形式變換為數字形式的方法。

分析:輸入的值是字符形式的,輸出的值是整型的,解決這個問題的關鍵就是將數字和運算符號的字符型轉化成整型運算。在網上的大多解決方式都用到了棧且代碼量較長,本次采用的方法思路比較直接,代碼量也相對減少了很多。

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 int main()
 5 {
 6     int i = 0;
 7     string str;
 8     cin >> str;
 9     int n = str.length();
10     char *num = new char[n];
11     strcpy(num, str.c_str());
12     //char num[10] = "8+7*2-9/3";
13     int num2[15] = {0};
14     for (i=0;i<n;i++)
15     {
16         if (num[i] >= '0'&&num[i] <= '9')
17         {
18             num2[i] = num[i]-48;//char轉換成int
19         }
20     }
21     for (i = 0; i < n; i++)
22     {
23         if (num[i] == '*')
24         {
25             num2[i - 1] = num2[i - 1] *num2[i + 1];
26             for (int j = i; j <(n-2); j++)
27             {
28                 num[j] = num[j + 2];//長度-2
29                 num2[j] = num2[j + 2];
30             }
31         }
32         if (num[i] == '/')
33         {
34             num2[i - 1] = num2[i - 1] /num2[i + 1];
35             for (int j = i; j <(n-2); j++)
36             {
37                 num[j] = num[j + 2];//長度-2
38                 num2[j] = num2[j + 2];
39             }
40         }
41     }
42     for (i = 0; i < n; i++)
43     {
44         if (num[i] == '+')
45         {
46             num2[i - 1] = num2[i - 1]+num2[i + 1];
47             for (int j = i; j <(n-2); j++)
48             {
49                 num[j] = num[j + 2];//長度-2
50                 num2[j] = num2[j + 2];
51             }
52         }
53         if (num[i] == '-')
54         {
55             num2[i - 1] = num2[i - 1] -num2[i + 1];
56             for (int j = i; j <(n-2); j++)
57             {
58                 num[j] = num[j + 2];//長度-2
59                 num2[j] = num2[j + 2];
60             }
61         }
62     }
63     cout << num2[0] << endl;
64     return 0;
65 }

輸入“8+7*2-9/3”,num 和 num2 變量如圖所示:

變量名|  i 0 1 2 3 4 5 6 7 8
num 8 + 7 * 2 - 9 / 3
num2 8 0 7 0 2 0 9 0 3

先算乘除,后算加減,計算“ * ”運算后變量變成:

 

變量名| i 0 1 2 3 4 5 6 7 8
num 8 + 7 - 9 / 3 / 3
num2 8 0 14 0 9 0 3 0 3

計算“ / ”后:

變量名| i 0 1 2 3 4 5 6 7 8
num 8 + 7 - 9 / 3 / 3
num2 8 0 14 0 3 0 3 0 3

最后計算加減“ + - ”,num2[0] 就成了8+14-3=19.

運行如圖所示:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM