1.7编程基础之字符串:06合法 C 标识符

总时间限制:
1000ms
内存限制:
65536kB
描述

给定一个不包含空白符的字符串,请判断是否是C语言合法的标识符号(注:题目保证这些字符串一定不是C语言的保留字)

C语言标识符要求:

1. 非保留字;

2. 只包含字母、数字及下划线(“_”)。

3. 不以数字开头。

输入
一行,包含一个字符串,字符串中不包含任何空白字符,且长度不大于20。
输出
一行,如果它是C语言的合法标识符,则输出yes,否则输出no。
样例输入
RKPEGX9R;TWyYcp
样例输出
no
来源

北京大学 计算概论 06 心理及信管 期末考试


看到这个,我好惊讶,好水一道题!

然后一开始就这样

#include
#include
char a[25];
int main()
{
    gets(a);
        if(((a[0]>='a'&&a[0]<='z')||(a[0]<'A'&&a[0]>'Z')||a[0]=='_')&&((a[i]>='0'&&a[i]<='9')||(a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z')||a[i]=='_'))
        {
            printf("yes");
            return 0;
        }
    printf("no");
    return 0;
}


发现交上去不对!

一直检查,还是没发现,直到后来

for(unsigned int i=0;i<=strlen(a);i++)
这里!

我才发现,我以前喜欢用数组里面的[1]号元素,所以都用strlen(a),但是这次用的数组[0]开始装,运行到最后一个的时候,就运行到了'\0',就错了。。。。

下面贴正确的答案:


#include
#include
char a[25];
int main()
{
	gets(a);
	for(unsigned int i=0;i<=strlen(a)-1;i++)
		if(((a[0]>='a'&&a[0]<='z')||(a[0]>='A'&&a[0]<='Z')||a[0]=='_')&&((a[i]>='0'&&a[i]<='9')||(a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z')||a[i]=='_'));
			else
			{
				printf("no");
				return 0;
			}
	printf("yes");
	return 0;
 }


以后还是要仔细,注意数组的大小呀。。

你可能感兴趣的:(1.7编程基础之字符串:06合法 C 标识符)