首页 / C++ / 简单计算器的编程【C++】
简单计算器的编程【C++】
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了简单计算器的编程【C++】,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2843字,纯文字阅读大概需要5分钟。
内容图文
![简单计算器的编程【C++】](/upload/InfoBanner/zyjiaocheng/839/9272f2f6776d4069809df970f4f9feb0.jpg)
第一篇博客嘎嘎
这篇是用栈去编程简单计算器
关键词:atoi()、memset()【https://blog.csdn.net/qq_27522735/article/details/53374765】、printf("%.2f\n", x)【保留两位小数】
#include <iostream>
#include <cstdio>
#include <vector>
#include <stack>
#include <cstring>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
struct stNode
{
int nType; //元素的类型,0操作数,1操作符
double nNum; //操作数
char cOp; //操作符
};
stack<char> sop; //运算符栈,用于中缀表达式转换成后缀表达式
stack<double> sNum; //操作数栈,用于后缀表达式的计算
char cExp[1024]; //读入的字符表达式
vector<stNode> SuffixExp; //后缀表达式
inline float GetNum(const char* p, int& k)
{
int n = atoi(p);
k = 0;
while (isdigit(p[k]))
++k;
return n;
}
inline int get_ip(char c) //获取栈内优先级
{
switch (c)
{
case '#':
return 0;
case '+':
case '-':
return 3;
case '*':
case '/':
return 5;
}
return 99;
}
inline int get_op(char c) //获取栈外优先级
{
switch (c)
{
case '#':
return 0;
case '+':
case '-':
return 2;
case '*':
case '/':
return 4;
}
return 99;
}
int main(void)
{
memset(cExp, 0, sizeof(cExp)); //初始化栈
while(cin.getline(cExp, 1024))
{
//读入字符表达式
if(strlen(cExp)==1 && cExp[0]=='0') break;
strcat(cExp, "#");
while (!sop.empty()) //清空操作符栈
sop.pop();
sop.push('#'); //放入界定符
//将中缀表达式转化成后缀表达式
char *p = cExp;
while (p[0] != '\0')
{
if (p[0] == ' ') //空格跳过
{
++p;
continue;
}
if (isdigit(p[0]))
{
//数字输出到后缀表达式
int k;
double n = GetNum(p, k);
stNode stTemp;
stTemp.nType = 0;
stTemp.nNum = n;
stTemp.cOp = 0;
SuffixExp.push_back(stTemp);
p += k;
}
else
{
char ch1 = p[0];
char ch2 = sop.top();
if (get_op(ch1) > get_ip(ch2))
{
sop.push(ch1);
++p;
}
else if (get_op(ch1) < get_ip(ch2))
{
//输出到后缀表达式
stNode stTemp;
stTemp.nType = 1;
stTemp.nNum = 0;
stTemp.cOp = ch2;
SuffixExp.push_back(stTemp);
sop.pop();
}
else
{
sop.pop();
++p;
}
}
}
//后缀表达式的计算
while (!sNum.empty()) //清空操作数栈
sNum.pop();
for (int i = 0; i < (int)SuffixExp.size(); ++i)
{
if (SuffixExp[i].nType == 0)
sNum.push(SuffixExp[i].nNum);
else
{
double y = sNum.top();
sNum.pop();
double x = sNum.top();
sNum.pop();
switch (SuffixExp[i].cOp)
{
case '+':
x += y;
break;
case '-':
x -= y;
break;
case '*':
x *= y;
break;
case '/':
x /= y;
break;
}
sNum.push(x);
}
}
printf("%.2f\n", sNum.top()); //输出结果
return 0;
}
}
内容总结
以上是互联网集市为您收集整理的简单计算器的编程【C++】全部内容,希望文章能够帮你解决简单计算器的编程【C++】所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。