-
总时间限制:
- 1000ms 内存限制:
- 65536kB
-
描述
-
C语言中的合法标识符的定义为:以下划线或字母开头的字母数字串(含下划线)。
完成一个程序实现对输入的n个字符串进行判定,是否为C语言的合法标识符。如果是则输出1,不是则输出0
输入
-
输入的第一行为一个数字,表明有几个输入字串。
后面每一行为一个长度不超过80的字符串。
输出
- 对所有输入的字符串进行判断,是合法标识符则输出1,回车。否则输出0,回车。 样例输入
-
5 hello_world my god i _stdio 008A
样例输出
-
1 0 1 1 0
问题链接:Bailian3659 判断是否为C语言的合法标识符
问题分析:(略)程序说明:按照规则逐个字符判断处理。
15行getchar();是为了处理输入的行数后面的空格,如果不写的话会造成输出缺少一项个头插入,且开头会先输出一个零
后面少输出一组数据,及将(行数后的空格)进行了第一组数据进行判断,而缺少了一行,加了getchar(),以后会取走空格,从而正常执行,也可以改为scanf("%d "),里面的那个空格也可以AC,就避免了将行数后面的空格读入了
AC的C语言程序如下:
- /* Bailian3659 判断是否为C语言的合法标识符 */
- #include <stdio.h>
- #include <ctype.h>
- #define N 80
- char s[N + 1];
- int main(void)
- {
- int n, ans;
- char *t;
- scanf("%d", &n);
- getchar();
- while(n--) {
- 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("%d\n", ans);
- }
- return 0;
- }
/* Bailian3659 判断是否为C语言的合法标识符 */
#include <stdio.h>
#include <ctype.h>
#define N 80
char s[N + 1];
int main(void)
{
int n, ans;
char *t;
scanf("%d", &n);
getchar();
while(n--) {
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("%d\n", ans);
}
return 0;
}