输入一个字符串,判断其是否是C的合法标识符。

会打代码的扫地王大爷 2013-12-24 05:50:05
Problem Description
输入一个字符串,判断其是否是C的合法标识符。

Input
输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串。

Output
对于每组输入数据,输出一行。如果输入数据是C的合法标识符,则输出"yes",否则,输出“no”。

Sample Input
312ajff
i8x_a
ff ai_2

Sample Output
no
yes
no

我的代码为什么不能过

#include<stdio.h>
#include<string.h>
int main()
{
int num,i,j,flag=0,count=0;
char a[50];
scanf("%d",&num);
for(i=0;i<num;i++)
{
getchar();
gets(a);
for(j=0;j<strlen(a);j++)
{
if((a[0]>='0'&&a[0]<='9'))
{flag=0;continue;}
if((a[j]>='0'&&a[j]<='9')||(a[j]>='A'&&a[j]<='Z')||(a[j]>='a'&&a[j]<='z')||(a[j]=='_'))
count++;
if(count==strlen(a))
flag=1;
}
if(flag==1) printf("yes\n");
if(flag==0) printf("no\n");
}

}
...全文
6780 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_33091915 2016-08-06
  • 打赏
  • 举报
回复
引用 9 楼 yangyangsnr 的回复:
[quote=引用 5 楼 wlmnzf 的回复:] [quote=引用 1 楼 yangyangsnr 的回复:] 把for循环里的getchar();去掉就行了; 不知道你在这里放这个语句是做什么用的。
这是为了吃掉回车,要不然会直接把回车键当输入[/quote] gets(): 从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。 回车已经被gets读取了,不需要额外的getchar();[/quote] 学到了
赵4老师 2013-12-25
  • 打赏
  • 举报
回复
标识符不允许和保留字一样吧。
赵4老师 2013-12-25
  • 打赏
  • 举报
回复
长度限制被忽略了吧。
  • 打赏
  • 举报
回复
引用 3 楼 truelance 的回复:

for(j=0;j<strlen(a);j++)
{
    if(!((a[j]>='0'&&a[j]<='9')||(a[j]>='A'&&a[j]<='Z')||(a[j]>='a'&&a[j]<='z')||(a[j]=='_')))
    {flag = 1; break;}

    if ((a[0]>='0'&&a[0]<='9'&&j==0))
    {flag = 1; break;}
}
if(flag==0) printf("yes\n");
if(flag==1) printf("no\n"); 
也过不了裁判系统
  • 打赏
  • 举报
回复
引用 1 楼 yangyangsnr 的回复:
把for循环里的getchar();去掉就行了; 不知道你在这里放这个语句是做什么用的。
这是为了吃掉回车,要不然会直接把回车键当输入
goodleap 2013-12-25
  • 打赏
  • 举报
回复 1
这个不知道啊
孤雲独去闲 2013-12-25
  • 打赏
  • 举报
回复
引用 5 楼 wlmnzf 的回复:
[quote=引用 1 楼 yangyangsnr 的回复:] 把for循环里的getchar();去掉就行了; 不知道你在这里放这个语句是做什么用的。
这是为了吃掉回车,要不然会直接把回车键当输入[/quote] gets(): 从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。 回车已经被gets读取了,不需要额外的getchar();
还有多远 2013-12-24
  • 打赏
  • 举报
回复
合法的标示符应该首字符是字母或下划线,其他字符是字母、下划线或者数字, a[i] == '_' || isalpha(a[i]) i = 0 a[i] == '_' || isalum(a[i]) i > 0 另外,由于题目中没有说非得是“用户标示符”,目测可以不需要考虑关键字的情况
熊熊大叔 2013-12-24
  • 打赏
  • 举报
回复

for(j=0;j<strlen(a);j++)
{
    if(!((a[j]>='0'&&a[j]<='9')||(a[j]>='A'&&a[j]<='Z')||(a[j]>='a'&&a[j]<='z')||(a[j]=='_')))
    {flag = 1; break;}

    if ((a[0]>='0'&&a[0]<='9'&&j==0))
    {flag = 1; break;}
}
if(flag==0) printf("yes\n");
if(flag==1) printf("no\n"); 
孤雲独去闲 2013-12-24
  • 打赏
  • 举报
回复
引用 1 楼 yangyangsnr 的回复:
把for循环里的getchar();去掉就行了; 不知道你在这里放这个语句是做什么用的。
还有,主函数应该有个返回值的,函数最后要加上return 0;
孤雲独去闲 2013-12-24
  • 打赏
  • 举报
回复
把for循环里的getchar();去掉就行了; 不知道你在这里放这个语句是做什么用的。

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧