判断其是否是C的合法标识符?

问题是
输入一个字符串,判断其是否是C的合法标识符。
输入
输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串。
输出
对于每组输入数据,输出一行。如果输入数据是C的合法标识符,则输出"yes",否则,输出“no”。
样例输入
312ajf
fi8x_a
ff ai_2样例输出no
yes
no
我是这样做的
#include<stdio.h>#include<string.h>
int main()
{ char a[51];
int i,j,k=0,l,n;
scanf("%d",&n);
while(n--){gets(a);
l=strlen(a);
if((a[0]=='_')||(a[0]>='a'&&a[0]<='z')||(a[0]>='A'&&a[0]<='Z'))
k=1;
for(i=1;i<l;i++) { if((a[i]=='_')||(a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z')||(a[i]>='0'&&a[i]<='9'))
j=1;
else
{j=0;
break;}
}
if(j==1&&k==1)
printf("yes\n");
else
printf("no\n");

}

return 0;
}
当我输入题目中给的三组测试数据是出现

这样 情况,第三组测试数据输不进去了?提交后也说wrong answer?
why呢?

第1个回答  2012-11-08
你考虑开始是$开头的变量也可以
如输入
$123
输出
yes
还有一点就是如果输入
dsgf+-*^%报错 除0-9还有a-z,A-Z _ $ 之外的字符,就可以了,只要考虑这么多就可以前几天就AC了这道题,你自己再想想吧。追问

亲,标示符的首位必须是字母或下划线(这是书上说的),不用考虑以$开头的变量吧?

输入dsgf+-*^%报错 ,当然会报错,这个我知道的,我的问题是我错哪了,为什么提交后说wrong answer呢?

追答

你既然不考虑$,那怪会报错
#include
#include
int main()
{ char a[51];
int i,j,k=0,l,n;
scanf("%d",&n);
while(n--)
{ gets(a);
l=strlen(a);
if((a[0]=='_')||(a[0]>='a'&&a[0]='A'&&a[0]='a'&&a[i]='A'&&a[i]='0'&&a[i]<='9') ||(a[i]=='$'))
j=1;
else
{j=0;
break;}
}
if(j==1 &&k==1)
printf("yes\n");
else
printf("no\n");
}
return 0;
}

试下这个看,能否AC,你是在哪里做的啊,给个地址。。。我在宁大ACM上AC的是没有输入n的

本回答被网友采纳
第2个回答  2012-11-08
其实就是因为scanf("%d", &n);后回车还在缓冲区里面。
所以从您的程序执行情况可以看到,输入3按回车执行就输出no了,就是gets(a)读取的缓冲区的回车。
在scanf("%d", &n);后面加一句getchar();吸收掉回车就可以了。追问

亲,按照你说的,测试正确,结果如图所示

但我提交后出现下图所示结果

调试正确的的嘛,可结果还是wrong answer,why呢?

追答

wrong answer的原因是:
1. 可能还有其它的合法变量名称没有考虑到,比如$开头的名称
2. c中的关键字如int这样的标识符是否合法,您也要考虑。

本回答被提问者采纳

判断其是否是C的合法标识符?
yes 还有一点就是如果输入 dsgf+-*^%报错 除0-9还有a-z,A-Z _ $ 之外的字符,就可以了,只要考虑这么多就可以前几天就AC了这道题,你自己再想想吧。

输入一个字符串,判断其是否是C的合法标识符。用c语言编写程序。_百度知 ...
C语言合法标识符由数字,字母,下划线组成。且第一个字母不能为数字。于是,根据其定义,可以进行判断,代码如下:define is_upper(x) (x>='A' && x<='Z')\/\/大写字母判断。#define is_lower(x) (x>='a' && x<='z')\/\/小写字母判断。#define is_char(x) (is_upper(x) || is_lowe...

c语言 输入一个字符串,判断其是否是C的合法标识符。
1、使用中文当标识符,其前提是编译器支持中文当标识符,C++11之后,通用字符名覆盖到了汉字。2、使用中文作为标识符时,其头文件与原来一样。3、程序中的名字空间,保持不变。4、可以将保留字定义为中文,用define定义。5、可以用类型名,直接定义中文的变量名。6、中文标识符的使用,和普通标识符一...

杭电2024题 题目要求:输入一个字符串,判断其是否是C的合法标识符。
有空格的话,你这种读取方式会被读取成两个字符串,而且判断方式中》=字母也是行的,你没有=号,而且对合法字符串的判断思路也不对,c语言标准有两个,一个是字符串只能由字母,数字,下划线组成,第二是首位只能是下划线或字母,你那根据长度判断有无空格,若有其它字符%,。等也不能判断 另附本人...

输入一个字符串,判断其是否是C的合法标识符。 C语言新手
{ printf("Pleale input a string(## end)...\\nstr="); if(gets(a),a[0]=='#' && a[1]=='#')\/\/输入了两个##则结束 break; if(!(a[0]>='a' && a[0]<='z' || a[0]>='A' && a[0]<='Z' || a[0]=='...

C语言中的标识符有哪些?怎么才算是合法的标识符?
C语言标识符是指用来标识某个实体的一个符号,在不同的应用环境下有不同的含义,标识符由字母(A-Z,a-z)、数字(0-9)、下划线“_”组成,并且首字符不能是数字,但可以是字母或者下划线。例如,正确的标识符:abc,a1,prog_to。标识符长度是由机器上的编译系统决定的,一般的限制为8字符(注...

C语言如何判断一个字符是不是标识符?
)函数,它会检查传入的字符是否是字母或数字。if(isalnum(c))printf("%c is a identifier.", c);else printf("%c is not a identifier.", c);注意:C语言中标识符的命名规则是,以字母或下划线开头,后面跟字母、数字或下划线。另外,如果想要更精细的判断标识符,可以使用正则表达式来实现。

C语言合法标识符
首先判断第一个字符是不是字母或者下划线,如果不是输出no,如果是,那么逐一判断后面的字符是不是字母,数字或者下划线,如果都是,输出yes,不是输出no

以下哪些不是C++中合法的标识符?为什么?
允许将以下字符用作标识符的任意字符:_ a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 允许将以下字符用作标识符中除第一个字符以外的任意字符:0 1 2 3 4 5 6 7 8 9 new ...

怎样判断合法的用户自定义标识符
合法的用户自定义标志符只能以字母和下划线开头,且其中也不能包含除下划线以外的其它符号,如:£¥&皆不行。还有,不能和系统自定义的标志符重名,但是大写的能行,因为如C语言这些电脑语言都是识别大小写的。

相似回答
大家正在搜