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位(包括小数位)时,报错)不懂如何去做(已解决)

原文地址:https://www.cnblogs.com/deepYY/p/5223489.html