[英]using switch case instead of if else
我在我的大学学习编译器设计,这个程序用于识别用户输入行中的每个word
、 number
、 operation
、 separator
,就像你输入int i = 0;
(每个单词之间必须有空格)它将int
标识为关键字, i
标识为 id, =
等于, 0
标识为 number 和;
作为 output 中的分隔符,我的导师给了我一个任务,将本节中的“ if else
”更改为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++;
}
}
所以我尝试了大约一周的时间来解决这个问题,但无济于事。 我卡在这里了,谁能帮帮我,谢谢。
这是代码的rest
#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; }```
由于switch 仅适用于整数类型,您可能希望使用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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.