【问题标题】:using switch case instead of if else使用 switch case 而不是 if else
【发布时间】:2020-10-14 15:48:16
【问题描述】:

我在我的大学学习编译器设计这个程序用于识别用户输入的行中的每个word,number,operation,separator 比如当你输入int i = 0 ; (每个单词之间必须有空格) 它将int 标识为关键字,i 标识为 id,= 标识为相等,0 标识为数字,; 标识为输出中的分隔符 我的导师给了我一个任务,将“if elsein this section改为switch

for(int j=0;j<=k;j++){
        if(token[j]=="int"|| token[j]=="string"||token[j]=="float")
        { 
        cout<<"keyword : "<<token[j]<<endl; 
        num_token++;
        }
        else if(token[j]=="*"||token[j]=="+"||token[j]=="-"||token[j]=="/")
        {
        cout<<"operation : "<<token[j]<<endl;
        num_token++;
        }
        else if(token[j]==","||token[j]==";")
        {
        cout<<"separator : "<<token[j]<<endl;
        num_token++;
        }
        else if(token[j]=="=")
        {
        cout<<"equal : "<<token[j]<<endl;
        num_token++;
        } 
        else if(token[j]>="0"&&token[j]<="9")
        {
        cout<<"Number : "<<token[j]<<endl;
        num_token++;
        }
        else if(token[j]>="a"&&token[j]<="z")
        {
        cout<<"ID : "<<token[j]<<endl;
        num_token++;
        }
}

所以我尝试了大约一周的时间来解决这个问题,但无济于事。 我卡在这里了,谁能帮帮我,谢谢。

这是剩下的代码

#include<iostream>
using namespace std;
int main(){
    int num;
    string st,st1;
    string token[30];
    int k=0;
    int num_token=0;
    cout<<"Enter How Many Lines : "<<endl;
    cin>>num;
    cout<<"Please Enter The Line You Want To Process : "<<endl;
    for(int ii=0;ii<=num;ii++){
        getline(cin,st);
        for(int i=0;st[i]!='\0';i++){
            if(st[i]!= ' ')
            st1+=st[i];
            else{
                token[k]=st1;
                k++;
                st1="";
            }
        }
        token[k]=st1;
        for(int j=0;j<=k;j++){
            if(token[j]=="int"|| token[j]=="string"||token[j]=="float")
            { 
            cout<<"keyword : "<<token[j]<<endl; 
            num_token++;
            }
            else if(token[j]=="*"||token[j]=="+"||token[j]=="-"||token[j]=="/")
            {
            cout<<"operation : "<<token[j]<<endl;
            num_token++;
            }
            else if(token[j]==","||token[j]==";")
            {
            cout<<"separator : "<<token[j]<<endl;
            num_token++;
            }
            else if(token[j]=="=")
            {
            cout<<"equal : "<<token[j]<<endl;
            num_token++;
            } 
            else if(token[j]>="0"&&token[j]<="9")
            {
            cout<<"Number : "<<token[j]<<endl;
            num_token++;
            }
            else if(token[j]>="a"&&token[j]<="z")
            {
            cout<<"ID : "<<token[j]<<endl;
            num_token++;
            }
    }

token[30]="";
    k=0;
    if(ii<num && ii>0){
        cout<<" "<<endl;
        cout<<"Please Enter The Line Again"<<endl;
    }

}
 cout<<"total Number of Tokens is : "<<num_token;
 return 0; }```

【问题讨论】:

  • 你尝试了什么?是什么阻止您使用开关?
  • 我想这对你有帮助 stackoverflow.com/questions/6860525/…。顺便说一句,任务不错,我有时间会尝试解决它。​​

标签: c++ if-statement switch-statement token


【解决方案1】:

由于switch only works for integral types,您可能希望使用std::map 将您的字符串链接到整数类型。

最小的工作示例:

#include <iostream>
#include <map>
#include <string>
int main()
{
    int num_token=0;
    std::string token[4]{"int","="};
    std::map<std::string,int> m{{"int",0},{"string",0},{"float",0},{"=",1}};
    for(int j=0;j<2;j++){
        switch(m[token[j]]){
            case(0):
                std::cout<<"keyword : "<<token[j]<<std::endl; 
                num_token++;
                break;
            case(1):
                std::cout<<"eq : "<<token[j]<<std::endl; 
                num_token++;
                break;
        }
    }
    return 0;
}

【讨论】:

  • 谢谢,我不知道,我的第一次谷歌搜索也没有找到任何东西。请写一个解释它的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多