C++计算器项目的初始部分
github的链接:
https://github.com/deepYY/object-oriented/tree/master/Calculator
代码如下
main.cpp
#include<iostream>
#include<stdlib.h>
#include<string>
#include<queue>
#include"Scan.h"
#include"Print.h"
using namespace std;
int judge(string input) //判断数字是否超过10位
{
int m=0,n= input.size(),k,j;
for(k=0;k<n;k++)
{
if(input[k]=='-' && input[k]=='+' && input[k]=='*' && input[k]=='/' && input[k]=='(' && input[k]==')')
{
for(j=k;j<n;j++)
if(input[k]!='-' && input[k]!='+' && input[k]!='*' && input[k]!='/' && input[k]!='(' && input[k]!=')')
m++; //如果位数字m递增
}
}
return m;
}
int main()
{
int judge(string input);
string input;
cin >> input; //输入字符串
if(judge(input)>10) //数字超过10位,报错
{
cout << "error"<< endl;
return 0;
}
else //数字不超过10位
{
Scan sc; //实例化Scan的对象
Print pr; //实例化Print的对象
queue<string> getqueue= sc.ToStringQueue(input); //调用ToStringQueue()函数
pr.ToPrintQueue(getqueue); //调用ToPrintQueue()函数
return 0;
}
}
Scan.h
#ifndef SCAN_H_
#define SCAN_H_
#include<queue>
#include<string>
using namespace std;
class Scan
{
public:
queue<string> ToStringQueue(string input);
};
#endif
Scan.cpp
#include<iostream>
#include<string>
#include<queue>
#include "Scan.h"
using namespace std;
queue<string> Scan::ToStringQueue(string input)
{
int n=input.size(),i; //求输入字符串的长度
string Input; // 暂存字符串
queue<string> getinput; //字符所存入的队列
for(i=0;i<n;i++) //逐个字符扫描这个表达式
{
if(input[i]=='-' || input[i]=='+' || input[i]=='*' || input[i]=='/' || input[i]=='(' || input[i]==')') //若不为数字
{
if(Input!="") //如果暂存字符串非空
{
getinput.push(Input);
} //则存入队列
Input.clear(); //清除暂存字符
Input = input[i];
if(Input!="")
{
getinput.push(Input);
}
Input.clear();
}
else //若为数字
{
Input = Input + input[i]; //数字跟在暂存字符末端
continue;
}
}
if(Input!="")
{
getinput.push(Input); //遍历完成后暂存字符串非空则入队
}
return getinput; //返回此队列
}
Print.h
#ifndef PRINT_H_
#define PRINT_H_
#include<iostream>
#include<queue>
#include"Scan.h"
using namespace std;
class Print
{
public:
void ToPrintQueue( queue<string> ToStringQueue);
};
#endif
Print.cpp
#include<iostream>
#include<string>
#include<queue>
#include "Print.h"
using namespace std;
void Print::ToPrintQueue( queue<string> ToStringQueue) //输出得到的队列
{
int n = ToStringQueue.size(),j; //队列的长度
for(j=0;j<n;j++)
{
cout << ToStringQueue.front() <<endl; //输出队列的首个元素
ToStringQueue.pop(); //弹出队列的第一个元素
}
}
所遇到的困难
-
首先对类和对象一点都不懂,后来听人说C++远征之封装篇有讲这类的问题,我便去自学了一段时间,大致明白了题目中说创建Scan和Print类的意思
-
其次,对于队列queue这个概念十分陌生,便去网上寻找queue的教学,在C++ STL--stack/queue 的使用方法学习了,也明白了许多关于这方面的知识和语法
-
在一次次的尝试中,(当输入的数字超过10位(包括小数位)时,报错)不懂如何去做(已解决)