news 2026/4/30 2:39:27

C++实现简单计算器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++实现简单计算器

本文实例为大家分享了C++实现简单计算器的具体代码,供大家参考,具体内容如下

工具

  • stack
  • map

步骤

  • 初始化
  • 读取字符串
  • 去空格
  • 负号处理
  • 判断为空
  • 检查格式
  • 计算

示例

代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

#include <iostream>

#include <string>

#include <stdio.h>

#include <stack>

#include <map>

#include <math.h>

#include <stdlib.h>

#include <sstream>

usingnamespacestd;

charop[8][8];

map<char,int> m;

voidinit()

{

m['+'] = 1, m['-'] = 2, m['*'] = 3, m['/'] = 4, m['('] = 5, m[')'] = 6, m['#'] = 7;

op[1][1] ='>', op[1][2] ='>', op[1][3] ='<', op[1][4] ='<', op[1][5] ='<', op[1][6] ='>', op[1][7] ='>';

op[2][1] ='>', op[2][2] ='>', op[2][3] ='<', op[2][4] ='<', op[2][5] ='<', op[2][6] ='>', op[2][7] ='>';

op[3][1] ='>', op[3][2] ='>', op[3][3] ='>', op[3][4] ='>', op[3][5] ='<', op[3][6] ='>', op[3][7] ='>';

op[4][1] ='>', op[4][2] ='>', op[4][3] ='>', op[4][4] ='>', op[4][5] ='<', op[4][6] ='>', op[4][7] ='>';

op[5][1] ='<', op[5][2] ='<', op[5][3] ='<', op[5][4] ='<', op[5][5] ='<', op[5][6] ='=';

op[6][1] ='>', op[6][2] ='>', op[6][3] ='>', op[6][4] ='>', op[6][6] ='>', op[6][7] ='>';

op[7][1] ='<', op[7][2] ='<', op[7][3] ='<', op[7][4] ='<', op[7][5] ='<', op[7][7] ='=';

}

doubleoperate(doublenum1,charoper,doublenum2)

{

if(oper =='+')

returnnum1 + num2;

if(oper =='-')

returnnum1 - num2;

if(oper =='*')

returnnum1 * num2;

if(oper =='/')

returnnum1 / num2;

}

string trim(string str)

{

index = 0;

if(!str.empty()){

while((index = str.find(' ',index) != string::nops)

str.erase(index,1);

}

returnstr;

}

string change(string str)

{

intstart;

start +="#";

for(inti = 0; i < str.length(); i++){

if(str[i] =='-'){

if(i == 0 || i != 0 && (m[str[i-1]] >= 1 && m[str[i-1]] <= 5

&& str[i+1] >='0'&& str[i+1] <='9'){

str +=" ";

intj = i+1;

start = j;

while(m[str[j]] == 0)

j++;

for(intk = str.length() - 1; k >= j; k--)

str[k] = str[k-3];

str[i] ='(', str[i+1] ='0', str[i+2] ='-';

intl = i+3;

string s = str.substr(start, j - start);

for(intk = 0; k < s.length(); k++)

str[l+k] = s[k];

str[l+s.length()] =')';

}

}

}

str.erase(str.length()-1, 1);

returnstr;

}

booltest(string str)

{

boolifOK =true;

intflag = 0;

stack<char> s;

intstart, e;

str +="#";

for(inti = 0; i < str.length(); i++){

//判断非法字符

if((str[i] <'0'|| str[i] >'9') && m[str[i]] == 0 && str[i] !='.')

returnfalse;

if(str[i] =='#'&& i!= str.length()-1)

returnfalse;

//判断小数点

if(m[str[i]] == 0){

if(flag == 0){

start = i;

flag = 1;

}

}

if(m[str[i]] != 0){

if(flag == 1){

e = i;

string st = str.substr(start, e - start);

intpointNum = 0;

if(st[0] =='.')returnfalse;

for(intj = 0; j < st.length(); j++){

if(st[j] =='.') pointNum++;

}

if(pointNum > 1)returnfalse;

}

flag = 0;

}

//判断运算符

if(str[i] =='+'|| str[i] =='-'|| str[i] =='*'|| str[i] =='/'){

if(i == 0)returnfalse;

if((str[i-1] <'0'|| str[i-1] >'9') && str[i-1] !=')')returnfalse;

if((str[i+1] <'0'|| str[i+1] >'9') && str[i+1] !='(')returnfalse;

}

//判断括号

if(str[i] =='(')

s.push(str[i]);

if(str[i] ==')'){

if(s.empty())returnfalse;

charc = s.top();

if(c =='(')

s.pop();

else

returnfalse;

}

}

//判断括号

if(!s.empty())

ifOK =false;

returnifOK;

}

voidcaculate(string str)

{

str +="#";

intflag = 0;

intstart, e;

stack<double> numStack;//操作数栈

stack<char> operStack;//运算符栈

operStack.push('#');

inti = 0;

while(str[i] !='#'|| operStack.top() !='#'){

if(m[str[i]] == 0){

if(flag == 0){

start = i;

flag = 1;

}

}

else{

if(flag == 1){

e = i;

//string 转 double

stringstream s (str.substr(start, e - start));

doublenum;

s >> num;

numStack.push(num);

flag = 0;

}

charc = operStack.top;

if(op[m[c]][m[str[i]]] =='<'){

operStack.push(str[i]);

i++;

}

elseif(op[m[c]][m[str[i]]] =='='){

operStac.pop();

i++;

}

else{

charoper = operStack.top();

operStac.pop();

doublenum2 = numStack.top();

numStack.pop();

doublenum1 = numStack.top();

numStack.pop();

doubleresult = operate(num1, oper, num2);

numStack.push(result);

}

}

}

printf("\t\t\t= %f\n",numStack.top());

}

intmain()

{

init();//初始化

printf("\n\n\n\t\t\t请输入表达式, 退出请输入end:\n");

string s;

getline(cin, s,"\n");//读取字符串

s = trim(s);//去空格

s = change(s);//处理负号

if(s =="end"){

break;

}

elseif(s.length() > 0){//判断为空

if(!test(s))//检查格式

printf("\t\t\t格式错误\n");

else

caculate(s);//计算

}

else{

printf("\t\t\t输入不能为空\n");

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 2:39:22

HiClaw 1.1.0:企业级 Agent 开发的基建升级

我最近在做一个企业 AI 培训项目&#xff0c;帮客户部署智能体平台。说实话&#xff0c;技术能力早就不是问题&#xff0c;真正的挑战是怎么让它在各种奇葩环境里稳稳当当跑起来。 上周刚交付一个项目&#xff0c;用的是 1.0.9 版本。客户验收那天说"挺稳的"&#x…

作者头像 李华
网站建设 2026/4/30 2:39:21

VS Code 远程容器开发环境落地实战(生产环境零故障部署手册)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;VS Code 远程容器开发环境落地实战&#xff08;生产环境零故障部署手册&#xff09; 核心优势与适用场景 VS Code 的 Remote-Containers 扩展将开发环境完全容器化&#xff0c;实现“一次配置、处处运…

作者头像 李华
网站建设 2026/4/30 2:36:23

图灵的愿景:2025-2026出版新书的《人月神话》引用(1)

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 2026年是《人月神话》出版51周年。51年后&#xff0c;《人月神话》依然被新出版的书籍引用。 CRC Press 2026年出版的新书 Turings Vision: How AI is Shaping the World &#xff0…

作者头像 李华
网站建设 2026/4/30 2:35:43

彻底解除Cursor AI限制:免费无限使用Pro功能的终极方案

彻底解除Cursor AI限制&#xff1a;免费无限使用Pro功能的终极方案 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your tr…

作者头像 李华
网站建设 2026/4/30 2:23:48

第14章:创意应用探索(AI绘画!视频!翻译!数据分析)

Openclaw从入门到精通系列文章 文章目录 Openclaw从入门到精通系列文章 前言 一、核心认知:OpenClaw创意与数据应用的底层逻辑 1.1 创意与数据应用的核心优势 1.2 核心准备:模型与技能配置前提 二、AI绘画:创意素材生成与风格定制 2.1 核心应用场景与需求拆解 2.2 实操配置:…

作者头像 李华
网站建设 2026/4/30 2:23:42

Pigeon RB700工业控制器:接口配置与自动化应用解析

1. Pigeon RB700工业自动化控制器深度解析作为一名在工业自动化领域摸爬滚打多年的工程师&#xff0c;当我第一次看到Kristech推出的Pigeon RB700控制器时&#xff0c;立刻被它丰富的接口配置所吸引。这款基于树莓派CM4模块的DIN导轨控制器&#xff0c;堪称当前市场上功能最全面…

作者头像 李华