每周一坑--简单的计算器

网友投稿 202 2022-11-16

每周一坑--简单的计算器

问题: 做一个计算器,要能够进行+-*/等基本计算。后续可能支持幂运算,求对数,等运算。

效果大概是这样

输入1+2/3 =

输出:ans =1.66

先从比较简单的版本开始。

版本1:

思路:获取用户输入,得到一个字符串类型的值  input。

然后对这个字符串进行处理:

逐个字符的分析,如果出现 +-*/=这样的运算符,则它的前面的那些字符一定是个数字,把这些字符转换成数字。

然后提取运算符,进行运算即可。

先提取字符串:

//简单的计算器#include#includeint main(void){ using namespace std; string input;//字符串input 用来读取用户输入 double ans; //ans,用来存储答案 int kk = -1; //kk用来储存当前运算符位置 cout << "输入表达式:例如1+2=\n"; cin >> input; int length = input.length(); for (int i = 0; i < length; i++) { switch (input[i]) { case '+':case '-': case '*': case '/':case '=': { string s_num; s_num = input.substr(kk+1, i-kk-1); //debug cout << s_num<

效果如下:

然后,要把字符串转换成字符,可以直接按位转换,但是C++已经有了字符串转数字的函数了。在有个stringstream对象,用它可以 进行 字符串和数字互相转换。

参考:​​javascript:void(0)​​

//简单的计算器#include#include#includeint main(void){ using namespace std; string input;//字符串input 用来读取用户输入 double ans; //ans,用来存储答案 int kk = -1; //kk用来储存当前运算符位置 cout << "输入表达式:例如1+2=\n"; cin >> input; int length = input.length(); for (int i = 0; i < length; i++) { switch (input[i]) { case '+':case '-': case '*': case '/':case '=': { string s_num; s_num = input.substr(kk+1, i-kk-1); //debug stringstream ss; ss << s_num; double num; ss >> num; cout << num<

下面只要进行计算就好了

//进行计算 int arr_index = 0; //下个要算的数字的索引 ans = arr_double[0]; arr_index++; for (int i = 0; i < length; i++) { switch (input[i]) { case '+': ans +=arr_double[arr_index++]; break; case '-': ans -= arr_double[arr_index++]; break; case '*': ans *= arr_double[arr_index++]; break; case '/': ans /= arr_double[arr_index++]; break; case '=': break; } }

--

最后是完整代码

//简单的计算器#include#include#includeint main(void){ const int N = 100; using namespace std; string input;//字符串input 用来读取用户输入 int kk = -1; //kk用来储存当前运算符位置 double arr_double[N]; //用来存储要算的数字 int arr_all = 0; //数字的数量 double ans; //ans,用来存储答案 cout << "输入表达式:例如1+2=\n"; cin >> input; int length = input.length(); //获取数字 for (int i = 0; i < length; i++) { switch (input[i]) { case '+':case '-': case '*': case '/':case '=': { string s_num; s_num = input.substr(kk+1, i-kk-1); stringstream ss; ss << s_num; ss >> arr_double[arr_all] ; arr_all++; kk = i; } } } //进行计算 int arr_index = 0; //下个要算的数字的索引 ans = arr_double[0]; arr_index++; for (int i = 0; i < length; i++) { switch (input[i]) { case '+': ans +=arr_double[arr_index++]; break; case '-': ans -= arr_double[arr_index++]; break; case '*': ans *= arr_double[arr_index++]; break; case '/': ans /= arr_double[arr_index++]; break; case '=': break; } } cout << "ans=" << ans<

当然,这个计算器还有一些问题。

1.优先级问题,这个计算器只会从左往右计算。

2.不支持()的形式,很多时候我们都会用到()

3.不支持一些常用运算,比如求平方,立方,根号等等。

这些问题留到第二版解决吧。

第一版先到这里。 2018/11/2 22:07

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java数据结构ArrayList详解
下一篇:学生信息管理系统(C++实现)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~