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

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

运行如图所示:

华为笔试——C++字符串四则运算的实现的更多相关文章

  1. C++版 - 剑指Offer 面试题35:第一个只出现一次的字符 解题报告(华为OJ034-找出字符串中第一个只出现一次的字符)

    面试题35:第一个只出现一次的字符 题目:在一个字符串中找到第一个只出现一次的字符.如输入abaccdeff,则输出b.(2006年google的一道笔试题.) 分析: 首先应向确认一下是ASCII字 ...

  2. 华为笔试——C++转换字符串问题

    题目:转换字符串 题目介绍: 将输入字符串中下标为偶数的字符连成一个新的字符串输出,需要注意两点: 1. 如果输入字符串的长度超过20,则转换失败,返回“ERROR!”字符串: 2. 输入字符串只能由 ...

  3. 华为OJ平台——字符串分隔

    题目描述: 连续输入字符串,请按长度为8拆分每个字符创 后输出到新的字符串数组: 长度不是8整数倍的字符串请在后面补数字0,空字符串不处理 输入 连续输入字符串(输入两次,每个字符长长度小于100)输 ...

  4. 华为笔试——C++括号匹配

    题目:括号匹配 题目来源:https://blog.csdn.net/lizi_stdio/article/details/76618908 题目介绍:输入一个字符串,里面可能包含“()”.“ [   ...

  5. 华为OJ平台——字符串通配符

    题目描述: 在计算机中,通配符一种特殊语法,广泛应用于文件搜索.数据库.正则表达式等领域.现要求各位实现字符串通配符的算法.要求:实现如下2个通配符: *:匹配0个或以上的字符(字符由英文字母和数字0 ...

  6. 华为OJ:字符串合并处理

    字符串合并处理 按照指定规则对输入的字符串进行处理. 详细描述: 将输入的两个字符串合并. 对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序.这里的下标意思是字符在 ...

  7. 华为OJ:字符串加解密

    题目描述 1.对输入的字符串进行加解密,并输出. 2加密方法为: 当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B:字母Z时则替换为a: 当内容是数字时则把该 ...

  8. 华为測试 字符串运用-password截取

    Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的password进行通信,比方像这些ABBA.ABA,A,123321,可是他们有时会在開始或结束时增加一些无关的字符以防止别国破解.比 ...

  9. 华为OJ: 公共字符串计算

    有几个需要注意的地方,这个问题是不是大写和小写之间的区别.这样你就输入字符串大写或小写转换的计算前. 第二个,定要清晰.先将s1从[i]处開始与s2的[j]開始匹配,不相等则j++直到j等于s2.le ...

随机推荐

  1. 【转】Redis学习---阿里云Redis多线程性能增强版详解

    [原文]https://www.toutiao.com/i6594620107123589635/ 摘要 Redis做为高性能的K-V数据库,由于其高性能,丰富的数据结构支持,易用等特性,而得到广泛的 ...

  2. 转战JS(1) 初探与变量类型、运算符、常用函数与转换

    转战JS(1)初探与变量类型.运算符.常用函数与转换 做为一名.NET后台开发人员,正考滤向Web前端开发转型,之前也写过一代前端代码,可是当再回头看JS,并有转向它的意愿的时候,突然发现:原来JS不 ...

  3. word文档重新打开后文档结构错乱

    word文档重新打开后文档结构错乱,然后通过如下方法解决了. OFFICE2007及以上.        在打开word的时候左下角会有提示word自动更新文档样式,按esc键取消,然后在大纲模式下任 ...

  4. python中判断实例可迭代地几种方式

    1. 利用 __iter__内建属性 if hasattr(obj, '__iter__') : print 'iterable' 这种方法不能检测字符串,如:hasattr('', '__iter_ ...

  5. C# 利用VS自带的WSDL工具生成WebService服务类(转载)

    WebService有两种使用方式,一种是直接通过添加服务引用,另一种则是通过WSDL生成. 添加服务引用大家基本都用过,这里就不讲解了. 那么,既然有直接引用的方式,为什么还要通过WSDL生成呢? ...

  6. 团队作业——Alpha冲刺 11/12

    团队作业--Alpha冲刺 冲刺任务安排 杨光海天 今日任务:预览界面布局实现,并留下交互接口 明日任务:预览界面中自定义保存的实现 郭剑南 今日任务:尝试解决Python编写程序无法在Android ...

  7. MySql详解(四)

    MySql详解(四) MySql的DML操作 插入: 一.方式一 语法: insert into 表名(字段名,...) values(值,...); 特点: 1.要求值的类型和字段的类型要一致或兼容 ...

  8. node封装mysql操作

    前言 node是基于异步的,因此在进行数据库查询操作的通常是通过回调来操作查询结果.但是在有了es7的async/await,基本不再需要回调了,所以本篇是基于async/await对mysql进行一 ...

  9. 面向对象的JavaScript --- 动态类型语言

    面向对象的JavaScript --- 动态类型语言 动态类型语言与面向接口编程 JavaScript 没有提供传统面向对象语言中的类式继承,而是通过原型委托的方式来实现对象与对象之间的继承. Jav ...

  10. Promise 模式解析:Promise模式与异步及声明式编程

    一.构建流程 1.(异步)数据源(请求)的构建:Promise的构建并执行请求: 2.处理流程的构建:then将处理函数保存: 二.处理: 1.请求的响应返回: 2.调用后继处理流程. 三. 1.构建 ...