华为笔试——C++字符串四则运算的实现

2018-09-01 05:37:59来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

题目:字符串四则运算的实现

有字符串表示的一个四则运算表达式,要求计算出该表达式的正确数值。四则运算即:加减乘除"+-*/",另外该表达式中的数字只能是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.

运行如图所示:

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Crypto++ AES 加密解密流程

下一篇:华为机试 数字颠倒