C++计算器项目的初始部分

C++计算器项目实战
本文介绍了一个简单的C++计算器项目实现过程,通过实例讲解了如何使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值