华为笔试——C++字符串四则运算的实现
2024-08-25 01:27:27
题目:字符串四则运算的实现
有字符串表示的一个四则运算表达式,要求计算出该表达式的正确数值。四则运算即:加减乘除"+-*/",另外该表达式中的数字只能是1位(数值范围0~9),运算不用括号。另若有不能整除的情况,按向下取整处理,eg: 8/3得出值为2。
举例:字符串"8+7*2-9/3",计算出其值为19。
考点:数字的字符形式变换为数字形式的方法。
分析:输入的值是字符形式的,输出的值是整型的,解决这个问题的关键就是将数字和运算符号的字符型转化成整型运算。在网上的大多解决方式都用到了栈且代码量较长,本次采用的方法思路比较直接,代码量也相对减少了很多。
#include <iostream>
#include <string>
using namespace std;
int main()
{
int i = ;
string str;
cin >> str;
int n = str.length();
char *num = new char[n];
strcpy(num, str.c_str());
//char num[10] = "8+7*2-9/3";
int num2[] = {};
for (i=;i<n;i++)
{
if (num[i] >= ''&&num[i] <= '')
{
num2[i] = num[i]-;//char转换成int
}
}
for (i = ; i < n; i++)
{
if (num[i] == '*')
{
num2[i - ] = num2[i - ] *num2[i + ];
for (int j = i; j <(n-); j++)
{
num[j] = num[j + ];//长度-2
num2[j] = num2[j + ];
}
}
if (num[i] == '/')
{
num2[i - ] = num2[i - ] /num2[i + ];
for (int j = i; j <(n-); j++)
{
num[j] = num[j + ];//长度-2
num2[j] = num2[j + ];
}
}
}
for (i = ; i < n; i++)
{
if (num[i] == '+')
{
num2[i - ] = num2[i - ]+num2[i + ];
for (int j = i; j <(n-); j++)
{
num[j] = num[j + ];//长度-2
num2[j] = num2[j + ];
}
}
if (num[i] == '-')
{
num2[i - ] = num2[i - ] -num2[i + ];
for (int j = i; j <(n-); j++)
{
num[j] = num[j + ];//长度-2
num2[j] = num2[j + ];
}
}
}
cout << num2[] << endl;
return ;
}
输入“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.
运行如图所示:
最新文章
- SpringMVC上传文件的三种方式(转)
- 连接Linux下 XAMPP集成环境中部署的禅道的数据库MariaDB
- Python中类的特殊方法详解
- C++ new(1)
- 【sublime】在终端下手动安装sublime text 2
- ObjectStore onFetch方法获取记录总数
- ASP.NET 4的Demo实践:URL路由改进支持
- web服务器分析与设计(二)
- [置顶] 编辑框Editext光标最后显示
- 页面缓存OutputCache
- CodeForces--TechnoCup--2016.10.15--ProblemA--Transformation: from A to B
- Java 并发专题 : Executor具体介绍 打造基于Executor的Webserver
- MVC autofac 属性注入
- [Swift]LeetCode145. 二叉树的后序遍历 | Binary Tree Postorder Traversal
- Spark环境搭建(二)-----------HDFS shell 常用操作
- 29. SpringBoot Redis 非注解
- 【读书笔记】iOS-Game Kit
- Codeforces Round #499 (Div. 2) D. Rocket题解
- 在web项目中集成pdf.js的默认查看器
- Python - matplotlib 数据可视化