对一段字符串进行判断
输入:字符串,以#结束。
输出:关键字或字母或数字或符号+对应种别码。
种别码对照
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 100 char sum[MAX],ch,token[MAX];//字符串储存,单个字符,字符提取 int a=0,zbm,n,i;//计数器,种别码 char *gjz[6]={"begin","if","then","while","do","end"}; void FX(); void main() { printf("请输入字符串,以#结束:"); do { ch=getchar(); sum[a++]=ch; }while(ch!='#'); a=0; do { FX(); printf("%d\t%s\n",zbm,token); }while(zbm!=0);//直到最后一个为# getchar(); } void FX() { for(n=0;n<MAX;n++) {token[n]='\0';} n=0; ch=sum[a++]; while(ch==' '){ch=sum[a++];} if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))//字母或字母+数字 { do{ token[n++]=ch;//复制到提取中 ch=sum[a++]; }while((ch>='a'&&ch<='z')||(ch>='a'&&ch<='z')||(ch>='0'&&ch<='9')); zbm=11; for(n=0;n<6;n++)//关键字提取 { if(strcmp(token,gjz[n])==0) { zbm=n+1; } } a--; } else if(ch>='0'&&ch<='9')//纯数字 { a--; do { token[n++]=sum[a++]; ch=sum[a]; }while(ch>='0'&&ch<='9'); zbm=11; return; } else { switch(ch) { case '+':zbm=13;token[0]=ch;break; case '-':zbm=14;token[0]=ch;break; case '*':zbm=15;token[0]=ch;break; case '/':zbm=16;token[0]=ch;break; case ':':zbm=17;token[0]=ch;ch=sum[a++]; if(ch=='='){ token[1]=ch; zbm++; } else a--; break; case '<':zbm=20;token[0]=ch;ch=sum[a++]; if(ch=='='){ token[1]=ch; zbm++; } else if(ch=='>'){ token[1]=ch; zbm=zbm+2; } else a--; break; case '>':zbm=23;token[0]=ch;ch=sum[a++]; if(ch=='='){ token[1]=ch; zbm++; } else a--; break; case '=':zbm=25;token[0]=ch;break; case ';':zbm=26;token[0]=ch;break; case '(':zbm=27;token[0]=ch;break; case ')':zbm=28;token[0]=ch;break; case '#':zbm=0;token[0]=ch;break; default:break; } } }
运行结果: