个人编程作业(一)

瘦欲@ 提交于 2020-02-08 20:32:21
                                    
这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/SE
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzzcxy/SE/homework/10283
这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/SE
这个作业的目标 发布一篇随笔,使用markdown语法进行编辑。在随笔前附上github仓库地址。
作业正文 ....
其他参考文献 ...

GitHub链接:https://github.com/Huiliyi05/biangcheng

记录

  • 代码行数:155
  • 分析时间:30min
  • 编码时间:4h+
  • 曾遇到的问题
    1.++全角引号与半角引号问题++
    2.判断变量名是否正确
    else if(!entV.at(xx + 1).compare("无"))//跳过,不做操作

    3.没考虑负数情况
  • 需求的思路:见代码注释
  • 不会的知识的学习过程以及修改优化的过程:不会的地方太多了,请教了一个学长,其他的就各种百度...代码修修改改好多次,优化过程不提也罢!

    完整代码

#include<iostream>
#include<string>
#include <vector>
#include<cstring>
#include<map>
#include <typeinfo>
using namespace std;

string num[11] = {"零","一","二","三","四","五","六","七","八","九","十"};

//中文数字转化阿拉伯数字
int getNum(string a){
    int number;
    if(!a.compare(num[0]))  number = 0;
    if(!a.compare(num[1]))  number = 1;
    if(!a.compare(num[2]))  number = 2;
    if(!a.compare(num[3]))  number = 3;
    if(!a.compare(num[4]))  number = 4;
    if(!a.compare(num[5]))  number = 5;
    if(!a.compare(num[6]))  number = 6;
    if(!a.compare(num[7]))  number = 7;
    if(!a.compare(num[8]))  number = 8;
    if(!a.compare(num[9]))  number = 9;
    if(!a.compare(num[10])) number = 10;
    return number;
} 

// 以空格拆分字符串string 
void SplitSpace(string ent,vector<string> &entV){
    size_t start = 0,index = ent.find_first_of(' ',0);
    while(index != ent.npos)
    {
        if(start != index)
            entV.push_back(ent.substr(start,index-start));
        start = index+1;
        index = ent.find_first_of(' ',start);
    }
    if(!ent.substr(start).empty())
        entV.push_back(ent.substr(start));
}

//增加 减少 等于计算 
void getCalculatNumber(map<string,int> &varibale,string calculatSign,int number,string name){
    if(!calculatSign.compare("增加")) varibale[name] = varibale[name] + number;
    if(!calculatSign.compare("减少")) varibale[name] = varibale[name] - number;
    if(!calculatSign.compare("等于")) varibale[name] = number;
}

bool judge(map<string,int> &varibale,string calculatSign,int number,string name){
    bool flag = false;
    if(!calculatSign.compare("大于"))
        if(varibale[name] > number)    flag = true;
    if(!calculatSign.compare("小于"))
        if(varibale[name] < number)    flag = true; 
    if(!calculatSign.compare("等于"))
        if(varibale[name] == number)   flag = true;
    return flag;
}

//输出
void output(map<string,int> &varibale,string name){
    int number = varibale[name];
    if(number < 0)  {
        cout << "负";
        number = -number;   
        }
    switch(number){
        case 0: cout << "零" << endl; break;
        case 1: cout << "一" << endl; break; 
        case 2: cout << "二" << endl; break; 
        case 3: cout << "三" << endl; break; 
        case 4: cout << "四" << endl; break; 
        case 5: cout << "五" << endl; break; 
        case 6: cout << "六" << endl; break; 
        case 7: cout << "七" << endl; break; 
        case 8: cout << "八" << endl; break; 
        case 9: cout << "九" << endl; break; 
        case 10: cout << "十" << endl; break; 
    }
} 

int main(){
    
    string ent;
    map<string,int> varibale;
    while(getline(cin,ent)){
        vector<string> entV;
        SplitSpace(ent,entV);
//      for (int i=0;i<entV.size();i++)
//          cout<<entV.at(i)<<endl;
//        cout << entV.size() << endl;
        
        if(!entV.at(0).compare("整数")){
            //第一个为“整数”,则是储存变量 
            varibale.insert(map<string,int>::value_type(entV.at(1),0));
            int number = getNum(entV.at(3));
            getCalculatNumber(varibale,entV.at(2),number,entV.at(1));
        }
        else if(!entV.at(0).compare("看看")){
            //第一个为“看看”,则是输出变量 
            output(varibale,entV.at(1));
        }else if(!entV.at(0).compare("如果")){
            //第一个为“如果”,则是判断操作 
            int number = getNum(entV.at(3));
            if(judge(varibale,entV.at(2),number,entV.at(1))){
                if(!entV.at(5).compare("看看")){
                    //判断看看后面是要求输出的字符串,还是变量名 
                    string ch = entV.at(6).substr(0, 2);
                    if(!ch.compare("“")){
                        string str = entV.at(6).substr(2, entV.at(6).length()-3);
                        cout << str << endl;
                    }else{
                        output(varibale,entV.at(6));
                    } 
                }if(!entV.at(5).compare("无")){
                    //跳过,不做操作 
                }else{
                    //若则后面为改变操作,如 气温 增加 二 
                    int number = getNum(entV.at(7));
                    getCalculatNumber(varibale,entV.at(6),number,entV.at(5));
                } 
            }else{
                //从后往前找否则的位置 
                int xx;
                for(int i = entV.size() - 1; i >= 0; i--){
                    if(!entV.at(i).compare("否则")){
                        xx = i;
                        break;
                    }
                }
                if(!entV.at(xx + 1).compare("看看")){
                    //判断看看后面是要求输出的字符串,还是变量名
                    string ch = entV.at(xx + 2).substr(0, 2);
                    if(!ch.compare("“")){
                        string str = entV.at(xx + 2).substr(2, entV.at(xx + 2).length()-3);
                        cout << str << endl;
                    }else{
                        output(varibale,entV.at(xx + 2));
                    }
                }else if(!entV.at(xx + 1).compare("无")){
                    //跳过,不做操作 
                }else{
                    //若则后面为改变操作,如 气温 增加 二 
                    int number = getNum(entV.at(xx + 3));
                    getCalculatNumber(varibale,entV.at(xx + 2),number,entV.at(xx + 1));
                } 
            }
        }else{
            //第一个为变量名,则为修改参数 
            int number = getNum(entV.at(2));
            getCalculatNumber(varibale,entV.at(1),number,entV.at(0));
        }
    }
    return 0;
} 

测试样例


整数 气温 等于 十
气温 减少 三
气温 增加 二
看看 气温
如果 气温 大于 十 则 看看 “你好,世界” 否则 看看 “冻死我了”


整数 小杨年龄 等于 八
整数 小杨零花钱 等于 二
小杨年龄 增加 一
如果 小杨年龄 大于 八 则 小杨零花钱 增加 一 否则 无
看看 小杨零花钱


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!