/*
* Name: identifier.c
* Author: x-bit, at www.patching.net, AllRights Reserved.
* Description: 输入一串字符,判断该字符串是不是合法的C语言标识符。
* Date: 09-05-2004
* Compile environment: win2k vc6下调试通过
*
*/
#include <sio.h>
int identf(char *s);
int isKey(char *s);
int x_scmp(char *si, char *di);
int main()
{
char buffer[256];
printf("Enter a sing: ");
gets(buffer);
if(identf(buffer))
puts("合法的标识符");
else
puts("非法的标识符");
return 0;
}
/**************************************************************************/
int identf(char *s)
{
int flag=0;
char *p=s;
/*判断第一个字符是否符合*/
if((*s>='a' && *s<='z') || (*s>='A' && *s<='Z') || *s=='_')
{
flag=1;
s ;
}
/*从第二个字符开始遍历判断*/
while(*s && flag)
{
if((*s>='a' && *s<='z') || (*s>='A' && *s<='Z') || *s=='_'
|| (*s>='0' && *s<='9'))
{
flag=1;
s ;
}
else
flag=0;
}
/*判断是不是关键字*/
if(flag)
flag=isKey(p);
return flag;
}
/*****************************是不是关键字*******************************/
int isKey(char *s)
{
char *keyword[]={"auto", "break", "case", "char", "const", "continue", "default",
"do", "double", "else", "enum", "extern", "float", "for", "goto",
"if", "int", "long", "register", "return", "short", "signed",
"sizeof", "static", "suct", "switch", "typedef", "union", "unsigned",
"void", "volatile", "while"};
int i, flag=1;
for(i=0; i<32; i )
{
if(x_scmp(s, keyword[i])==0)
{
flag=0;
break;
}
}
return flag;
}
/*****************************字符串比较函数*******************************/
/* 为了练技术,自己写了一个scmp() */
int x_scmp(char *si, char *di)
{
while(*si && *di && *si==*di)
{
si ;
di ;
}
return *si-*di;
}
文章来源: