判断是否为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码来判断 但是第三个循环那里有些小问题 请问如何改正? 展开
完成一个程序实现对输入的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码来判断 但是第三个循环那里有些小问题 请问如何改正? 展开
展开全部
这不是小问题啊……你这个问题很大啊……
#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;
}
最后再补充几点,
不用统一输入统一输出。输入一个字符串,处理,输出,再输入下一个即可。
|| && 一起用的时候加括号,避免潜在的逻辑错误
用'A'来取A字符的ascii码。你就不用去查表了。而且就算你要直接用ascii值,str[j][k]>=48也比str[j][k]>47可读性大很多。
所以你这里完全可以写成
str[j][k]>='A'&&str[j][k]<='Z'
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询