zoukankan      html  css  js  c++  java
  • 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位(包括小数位)时,报错)不懂如何去做(已解决)

  • 相关阅读:
    门维修问题
    程序存储问题
    旅行(Dijkstra)问题
    《FDTD electromagnetic field using MATLAB》读书笔记之 Figure 1.14
    《FDTD electromagnetic field using MATLAB》读书笔记 Figure 1.2
    《FDTD electromagnetic field using MATLAB 》读书笔记001-差商种类
    第2本MATLAB书
    《DSP using MATLAB》示例 Example 10.2
    《DSP using MATLAB》示例 Example 10.1
    《DSP using MATLAB》 示例 Example 9.16
  • 原文地址:https://www.cnblogs.com/deepYY/p/5223489.html
Copyright © 2011-2022 走看看