标题:疯啦疯啦 感觉看看啥问题 我也不知道哪错啦
只看楼主
king_kong
Rank: 2
来 自:山东
等 级:论坛游民
帖 子:71
专家分:55
注 册:2010-9-9
结帖率:68.75%
已结贴  问题点数:20 回复次数:9 
疯啦疯啦 感觉看看啥问题 我也不知道哪错啦
题目描述
给出一个标识符,请你判断它是否是C语言合法的标识符。
输入
输入一个标识符。
输出
判断是否合法,如果是输出YES,否则输出NO。
示例输入
123You
示例输出
NO
提示
C语言规定:标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线。



这是我写的代码  看看哪错啦
#include <stdio.h>
#include <string.h>
int main()
{
    char a[20];
    int i,k;
    gets(a);
    k=strlen(a);
    if ((a[0]>='a'&&a[0]<='z')||(a[0]>='A'&&a[0]<='Z')||(a[0]=='_'))
    {
        for(i=1;i<=k;i++)
        {
            if (a[i]<'a'||a[i]>'z')&&(a[i]<'A'||a[i]>'Z')&&(a[i]!='_'))
            {
                break;
            }
        }
        if(i>k)
        {
            printf("YES");
        }
        else
        {
            printf("NO");
        }
    }
    else
    {
        printf("NO");
    }
    return 0;
}
搜索更多相关主题的帖子: 下划线 C语言 标识 
2011-03-20 23:16
minand
Rank: 2
等 级:论坛游民
帖 子:71
专家分:89
注 册:2011-3-16
得分:0 
|| 这个键是哪个键啊? 键盘上都找不到?
2011-03-20 23:28
给力芬2010
Rank: 2
等 级:论坛游民
帖 子:48
专家分:71
注 册:2011-3-17
得分:1 
if (a[i]<'a'||a[i]>'z')&&(a[i]<'A'||a[i]>'Z')&&(a[i]!='_'))
这句错了吧
2011-03-20 23:42
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
得分:3 
在ASCII中,字母数字下划线的顺序是:
0~9,A~Z,_,a~z

根据此排列,程序如下:
程序代码:
root@~ #cat 4.c
#include <stdio.h>

int main (void) {

        char id[10];
        int i=1;

        printf ("enter a C Legal identifier:");
        scanf ("%s",id);

        if(id[0]>='a'&&id[0]<='z'||id[0]>='A'&&id[0]<='Z'||id[0]=='_') {
                while(id[i]!='\0') {
                        if(id[i]<'0') {
                                printf ("No!\n");
                                return 0;
                        }
                        else if(id[i]>'9'&&id[i]<'A') {
                                printf ("No!\n");
                                return 0;
                        }
                        else if(id[i]>'Z'&&id[i]<'_') {
                                printf ("No!\n");
                                return 0;
                        }
                        else if(id[i]>'_'&&id[i]<'a') {
                                printf ("No!\n");
                                return 0;
                        }
                        else if(id[i]>'z') {
                                printf ("No!\n");
                                return 0;;
                        }
                        else{
                                i++;
                         }
                }
                printf ("Yes!\n");
        }else {
                printf ("No!\n");
        }

        return 0;

}

root@~ #


[ 本帖最后由 ansic 于 2011-3-21 00:09 编辑 ]

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-03-20 23:46
PP_make
Rank: 2
等 级:论坛游民
帖 子:21
专家分:62
注 册:2010-4-25
得分:5 
#include <stdio.h>
#include <string.h>
int main()
{
    char a[20];
    int i,k;
    printf("qing shu ru:\n");
    scanf("%s", a);
    k=strlen(a);
    if ((a[0]>='a'&&a[0]<='z')||(a[0]>='A'&&a[0]<='Z')||(a[0]=='_'))
    {
        for(i=1;i<=k;i++)
        {
            if (((a[i]>='a')&&(a[i]<='z'))||((a[i]>='A')&&(a[i]<='Z'))||(a[i]=='_')||((a[i]>= '0')&&( a[i]<='9')))

            continue;
            if(i==k)
            printf("yes\n");
            else
            {
            printf("no\n");
            break;
            }
        }
    }
    else printf("no\n");

    return 0;
}
当然有更好的算法,lz 再看看~
2011-03-21 00:07
PP_make
Rank: 2
等 级:论坛游民
帖 子:21
专家分:62
注 册:2010-4-25
得分:1 
应判断 i 是否等于k 应为最后是以 \n 结束的 ~
2011-03-21 00:09
king_kong
Rank: 2
来 自:山东
等 级:论坛游民
帖 子:71
专家分:55
注 册:2010-9-9
得分:0 
回复 2楼 minand
反斜杠上面就是那个
2011-03-21 20:53
WDMfans
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:86
专家分:168
注 册:2010-9-19
得分:0 
if ((a[0]>='a'&&a[0]<='z')||(a[0]>='A'&&a[0]<='Z')||(a[0]=='_'))

 if (((a[i]>='a')&&(a[i]<='z'))||((a[i]>='A')&&(a[i]<='Z'))||(a[i]=='_')||((a[i]>= '0')&&( a[i]<='9')))
这个更长
2011-03-21 20:59
逐渐学习
Rank: 6Rank: 6
等 级:侠之大者
帖 子:113
专家分:454
注 册:2010-9-26
得分:10 
程序代码:
#include <stdio.h>
#include <string.h>
int main()
{
    char a[20];
    int i,k;
    gets(a);
    k=strlen(a);
    if(k>19)
    {
        printf("长度超过19\n");
        return 1;
    }
    k--;//如果k=strlen a[k]='\0'
    if ((a[0]>='a'&&a[0]<='z')||(a[0]>='A'&&a[0]<='Z')||(a[0]=='_'))
    {
        for(i=1;i<=k;i++)
        {
            //if (a[i]<'a'||a[i]>'z')&&(a[i]<'A'||a[i]>'Z')&&(a[i]!='_'))
            //增加一个0-9,然后整体取非
            if (!((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z')||(a[i]=='_')||(a[i]>='0'&&a[i]<='9')))
            {
                break;
            }
        }
        if(i>k)
        {
            printf("YES");
        }
        else
        {
            printf("NO");
        }
    }
    else
    {
        printf("NO");
    }
    return 0;
}
收到的鲜花
  • king_kong2011-03-22 10:22 送鲜花  5朵   附言:我很赞同

帮人《---》帮己
2011-03-21 21:19
king_kong
Rank: 2
来 自:山东
等 级:论坛游民
帖 子:71
专家分:55
注 册:2010-9-9
得分:0 
回复 9楼 逐渐学习
呵呵    3克油     又有收获啦  
2011-03-22 10:21



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-334271-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.678170 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved