效果如下:
代码和解析:(C++)
/*
int 1
if 2
main 3
数字 4
return 5
cin 6
cout 7
for 8
( 9
) 10
{ 11
} 12
<< 13
>> 14
; 15
++ 16
< 17
= 19
变量 20
== 22
+ 23
> 24
*/
#include <iostream>
#include <string>
#include <string.h>
using namespace std;
struct String{
string str;
int mode;
}str[100];
void initial()
{
str[1].str="int";str[1].mode=1; str[2].str="if";str[2].mode=2;
str[3].str="main";str[3].mode=3; str[4].str="";str[4].mode=4;//第4类是数字
str[5].str="return";str[5].mode=5; str[6].str="cin";str[6].mode=6;
str[7].str="cout";str[7].mode=7; str[8].str="for";str[8].mode=8;
str[9].str="(";str[9].mode=9; str[10].str=")";str[10].mode=10;
str[11].str="{";str[11].mode=11; str[12].str="}";str[12].mode=12;
str[13].str="<<";str[13].mode=13; str[14].str=">>";str[14].mode=14;
str[15].str=";";str[15].mode=15; str[16].str="++";str[16].mode=16;
str[17].str="<";str[17].mode=17; str[19].str="=";str[19].mode=19;
str[20].str="";str[20].mode=20;//第20类是变量
str[21].str="endl";str[21].mode=21; str[22].str="==";str[22].mode=22;
str[23].str="+";str[23].mode=23; str[24].str=">";str[24].mode=24;
}
int main()
{
initial();
string str1;
while(getline(cin,str1))
{
int len=str1.length();
int i=0;
for(i=0;i<len;i++)
{
string str2="";
if(str1[i]==' ') continue;
bool flag=false;
if((str1[i]>='a'&&str1[i]<='z')||(str1[i]>='A'&&str1[i]<='Z'))//为标示符或变量名
{
// cout<<"zimu"<<endl;
while((str1[i]>='0'&&str1[i]<='9')||(str1[i]>='a'&&str1[i]<='z')||(str1[i]>='A'&&str1[i]<='Z'))
{
str2+=str1[i];
i++;
}
--i;
// cout<<"i:"<<i<<endl;
for(int n=1;n<=24;n++)
{
if(str2==str[n].str)
{
//cout<<"n:"<<n<<endl;
cout<<"("<<str[n].mode<<","<<str[n].str<<")"<<endl;
flag=true;
break;
}
}
if(flag==false)
cout<<"("<<str[20].mode<<","<<str2<<")"<<endl;
}
else if(str1[i]>='0'&&str1[i]<='9')//为数字的情况
{
// cout<<"shuzi"<<endl;
int sum=0;
while(str1[i]>='0'&&str1[i]<='9')
{
// cout<<"shuzi2"<<endl;
sum=sum*10+str1[i]-'0';
i++;
}
--i;
cout<<"("<<str[4].mode<<","<<sum<<")"<<endl;
}
else if(str1[i]=='('){cout<<"("<<str[9].mode<<","<<str[9].str<<")"<<endl;}
else if(str1[i]==')'){cout<<"("<<str[10].mode<<","<<str[10].str<<")"<<endl;}
else if(str1[i]=='{'){cout<<"("<<str[11].mode<<","<<str[11].str<<")"<<endl;}
else if(str1[i]=='}'){cout<<"("<<str[12].mode<<","<<str[12].str<<")"<<endl;}
else if(str1[i]=='=')//需要判断是1个"="还是2个"="
{
// cout<<"="<<endl;
string s1="";
while(str1[i]=='=')
{
s1+=str1[i];
i++;
}
--i;
for(int n=1;n<=24;n++)
{
if(s1==str[n].str)
{
//cout<<"n:"<<n<<endl;
cout<<"("<<str[n].mode<<","<<str[n].str<<")"<<endl;
break;
}
}
}
else if(str1[i]=='<')
{
// cout<<"<"<<endl;
string s2="";
while(str1[i]=='<')
{
s2+=str1[i];
i++;
}
--i;
for(int n=1;n<=24;n++)
{
if(s2==str[n].str)
{
//cout<<"n:"<<n<<endl;
cout<<"("<<str[n].mode<<","<<str[n].str<<")"<<endl;
break;
}
}
}
else if(str1[i]=='>')
{
// cout<<">"<<endl;
string s3="";
while(str1[i]=='>')
{
s3+=str1[i];
i++;
}
--i;
for(int n=1;n<=24;n++)
{
if(s3==str[n].str)
{
//cout<<"n:"<<n<<endl;
cout<<"("<<str[n].mode<<","<<str[n].str<<")"<<endl;
break;
}
}
}
else if(str1[i]=='+')
{
// cout<<"+"<<endl;
string s5="";
while(str1[i]=='+')
{
s5+=str1[i];
i++;
}
--i;
for(int n=1;n<=24;n++)
{
if(s5==str[n].str)
{
//cout<<"n:"<<n<<endl;
cout<<"("<<str[n].mode<<","<<str[n].str<<")"<<endl;
break;
}
}
}
}
}
return 0;
}