判断是否为C语言的合法标识符

C语言中的合法标识符的定义为:以下划线或字母开头的字母数字串(含下划线)。完成一个程序实现对输入的n个字符串进行判定,是否为C语言的合法标识符。如果是则输出1,不是则输出... C语言中的合法标识符的定义为:以下划线或字母开头的字母数字串(含下划线)。
完成一个程序实现对输入的n个字符串进行判定,是否为C语言的合法标识符。如果是则输出1,不是则输出0

以下为我的程序:

#include <stdio.h>
#include <string.h>

int main()
{
char str[1000][80];
int i,j,k,n,flag=1;
scanf("%d",&n);
for(j=0;j<n;j++)
{
for(k=0;k<80;k++)
scanf("%s",&str[j][k]);
}
for(j=0;j<n;j++)
{
k=0;
if(str[j][k]==95||str[j][k]>64&&str[j][k]<91||str[j][k]>96&&str[j][k]<123)
{
for(k=1;k<80;k++)
{
if(str[j][k]==95||str[j][k]>64&&str[j][k]<91||str[j][k]>96&&str[j][k]<123||str[j][k]>47&&str[j][k]<58)
continue;
else
{
printf("0\n");
break;
}
}
printf("1\n");
}
else
printf("0\n");
}
return 0;
}

我试图用ASCII码来判断 但是第三个循环那里有些小问题 请问如何改正?
展开
 我来答
百度网友07c6cf4cf
2015-11-24 · TA获得超过319个赞
知道小有建树答主
回答量:306
采纳率:100%
帮助的人:302万
展开全部

这不是小问题啊……你这个问题很大啊……

#include <stdio.h>
#include <string.h>
int main()
{
    char str[1000][80];
    int i,j,k,n,flag=1,len;
    scanf("%d",&n);
    for(j=0;j<n;j++)
    {
        /*不要k循环。80代表字符串的最长长度,但是字符串也可能不到80个字符,所以不应该一个个字符的读入,而且%s代表读入一整个字符串而不是一个字符。所以应该读入到str[j]里。前面不用&号因为str[j]已经是地址了。*/
        scanf("%s",str[j]);
    }
    /*我帮你调了缩进,你看一下是不是清晰了很多……最内层的else如果print 0之后break,后面还会print 1。这是最大的问题*/
    /*我们用一个flag变量代表当前字符串是否合法。1代表合法,0不合法,最后统一输出即可。*/
    for(j=0;j<n;j++)
    {
        k=0;
        flag=1;
        if(str[j][k]==95||str[j][k]>64&&str[j][k]<91||str[j][k]>96&&str[j][k]<123)
        {
            /*我们不知道字符串有多长。所以k<80不行。*/
            len = strlen(str[j]);
            for(k=1;k<len;k++)
            {
                if(str[j][k]==95||str[j][k]>64&&str[j][k]<91||str[j][k]>96&&str[j][k]<123||str[j][k]>47&&str[j][k]<58)
                    continue;
                else
                {
                    flag=0;
                    break;
                }
            }
        }
        else
            flag=0;
        printf("%d\n",flag);
    }
    return 0;
}

最后再补充几点,

  1. 不用统一输入统一输出。输入一个字符串,处理,输出,再输入下一个即可。

  2. || && 一起用的时候加括号,避免潜在的逻辑错误

  3. 用'A'来取A字符的ascii码。你就不用去查表了。而且就算你要直接用ascii值,str[j][k]>=48也比str[j][k]>47可读性大很多。

    所以你这里完全可以写成

    str[j][k]>='A'&&str[j][k]<='Z'
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式