華為筆試——C++字符串四則運算的實現 -开发者知识库

華為筆試——C++字符串四則運算的實現 -开发者知识库,第1张

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

有字符串表示的一個四則運算表達式,要求計算出該表達式的正確數值。四則運算即:加減乘除" -*/",另外該表達式中的數字只能是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 }

最佳答案:

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复