问题链接:POJ NOI0107-06 合法 C 标识符。
-
给定一个不包含空白符的字符串,请判断是否是C语言合法的标识符号(注:题目保证这些字符串一定不是C语言的保留字)。
C语言标识符要求:
1. 非保留字;
2. 只包含字母、数字及下划线(“_”)。
3. 不以数字开头。
输入
- 一行,包含一个字符串,字符串中不包含任何空白字符,且长度不大于20。 输出
- 一行,如果它是C语言的合法标识符,则输出yes,否则输出no。 样例输入
-
RKPEGX9R;TWyYcp
样例输出
-
no
-
-
描述
问题分析
一个简单的词法检查问题。
程序说明
按照题意逐个字符检查。
参考链接:(无)
AC的C语言程序:
#include <stdio.h>
#include <ctype.h>
#define N 20
char s[N + 1];
int main(void)
{
int ans;
char *t;
gets(s);
if(!isalpha(s[0]) && s[0] != '_') {
// 非字母或下划线开头则不是标识符
ans = 0;
} else {
ans = 1;
t = s + 1;
while(*t && ans) {
// 字母、下划线或数字,则检查下一个字符
if(isalpha(*t)) {
t++;
continue;
}
if(*t == '_') {
t++;
continue;
}
if(isdigit(*t)) {
t++;
continue;
}
// 非字母、下划线或数字则不是标识符
ans = 0;
break;
}
}
printf("%s\n", ans ? "yes" : "no");
return 0;
}