描述
给定一个不包含空白符的字符串,请判断是否是C语言合法的标识符号(注:题目保证这些字符串一定不是C语言的保留字)。
C语言标识符要求:
1. 非保留字;
2. 只包含字母、数字及下划线(“_”)。
3. 不以数字开头。
输入
一行,包含一个字符串,字符串中不包含任何空白字符,且长度不大于20。
输出
一行,如果它是C语言的合法标识符,则输出yes,否则输出no。
样例输入
RKPEGX9R;TWyYcp
样例输出
no
代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
int fun(char ch[], int len);
char ch[20];
gets(ch);
int flag,len; //flag用来标记是否合法 1合法 0不合法
len=strlen(ch);
flag=fun(ch, len);
if(flag==1) printf("yes");
else printf("no");
return 0;
}
int fun(char ch[], int len)
{
int i;
int flag=0; //flag用来标记是否合法 1合法 0不合法 初始设为0不合法
// 判断第一个字符 如果第一个字符不属于'_'or'a'~'z'or'A'~'Z'则不判断 直接到最后一步 输出flag=0;
if((ch[0]=='_')||(ch[0]>='a'&&ch[0]<='z')||(ch[0]>='A'&&ch[0]<='Z'))
{
/* 至于为什么还需判断第一个字符?
是以防止输入的为单字符 例如A 程序会带着flag=0直接跳到最后 会输出错误结果
*/
for(i=0;i<len;i++) //遍历字符
{
if((ch[i]=='_')||(ch[i]>='a'&&ch[i]<='z')||(ch[i]>='A'&&ch[i]<='Z')||(ch[i]>='0'&&ch[i]<='9')) flag=1;
else
{
flag=0; break; //如果有一个字符不属于合法字符则flag=0, 并跳出遍历
}
}
}
return flag; // 保证程序只有一个出口
}