继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

饮歌长啸
关注TA
已关注
手记 188
粉丝 46
获赞 152

有字符串表示的一个四则运算表达式,要求计算出该表达式的正确数值。四则运算即:加减乘除"+-*/",另外该表达式中的数字只能是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转换成int19         }
 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];//长度-229     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];//长度-238   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 变量如图所示:

变量名|  i012345678
num8+7*2-9/3
num2807020903

先算乘除,后算加减,计算“ * ”运算后变量变成:

 

变量名| i012345678
num8+7-9/3/3
num28014090303

计算“ / ”后:

变量名| i012345678
num8+7-9/3/3
num28014030303

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

运行如图所示:

https://img2.mukewang.com/5c72981900018fed03300105.jpg

 原文作者:会武术之白猫

原文链接:https://www.cnblogs.com/ljy1227476113/p/9556420.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP