
C语言合法标识符
Description输入一个字符串,判断其是否是C的合法标识符。Input输入数据包含n+1行,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是...
Description
输入一个字符串,判断其是否是C的合法标识符。
Input
输入数据包含n+1行,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串。
Output
对于输入的每个标识符,如果输入数据是C的合法标识符,则输出"yes",否则,输出“no”。
Sample Input
3
12ajf
fi8x_a
ff ai_2
Sample Output
no
yes
no 展开
输入一个字符串,判断其是否是C的合法标识符。
Input
输入数据包含n+1行,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串。
Output
对于输入的每个标识符,如果输入数据是C的合法标识符,则输出"yes",否则,输出“no”。
Sample Input
3
12ajf
fi8x_a
ff ai_2
Sample Output
no
yes
no 展开
8个回答
展开全部
想用枚举存放关键字用来判断,失败了。
#include
<stdio.h>
//
enum
keywd{enum,auto,double,int,struct,break,else,long,switch,case,register,typedef,
//
char,extern,return,union,const,float,short,unsigned,continue,
for
,signed
,void
,default,
//
goto,
sizeof
,volatile,
do,
if,
while,
static
};
void
main()
{
char
str[100];
gets(str);
if((str[0]=='_')||(str[0]>='A'&&str[0]<='z'))
printf("yes\n");
else
printf("no\n");
}
#include
<stdio.h>
//
enum
keywd{enum,auto,double,int,struct,break,else,long,switch,case,register,typedef,
//
char,extern,return,union,const,float,short,unsigned,continue,
for
,signed
,void
,default,
//
goto,
sizeof
,volatile,
do,
if,
while,
static
};
void
main()
{
char
str[100];
gets(str);
if((str[0]=='_')||(str[0]>='A'&&str[0]<='z'))
printf("yes\n");
else
printf("no\n");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我正好有这个程序。。。
这么变态的也让你们做。。
50348 zxl0714 1357 Accepted 40K 15MS G++ 1.28K 2007-04-18 19:24:23
#include <stdio.h>
int identf(char *str);
int isKey(char *str);
int x_strcmp(char *si, char *di);
int main()
{
char buffer[256];
int n,i;
scanf("%d",&n);
gets(buffer);
for (i=0;i<n;i++){
gets(buffer);
if(identf(buffer))
puts("yes");
else
puts("no");
}
return 0;
}
int identf(char *str)
{
int flag=0;
char *p=str;
if((*str>='a' && *str<='z') || (*str>='A' && *str<='Z') || *str=='_')
{
flag=1;
str++;
}
while(*str && flag)
{
if((*str>='a' && *str<='z') || (*str>='A' && *str<='Z') || *str=='_'
|| (*str>='0' && *str<='9'))
{
flag=1;
str++;
}
else
flag=0;
}
if(flag)
flag=isKey(p);
return flag;
}
int isKey(char *str)
{
char *keyword[]={"auto", "break", "case", "char", "const", "continue", "default",
"do", "double", "else", "enum", "extern", "float", "for", "goto",
"if", "int", "long", "register", "return", "short", "signed",
"sizeof", "static", "struct", "switch", "typedef", "union", "unsigned",
"void", "volatile", "while"};
int i, flag=1;
for(i=0; i<32; i++)
{
if(x_strcmp(str, keyword[i])==0)
{
flag=0;
break;
}
}
return flag;
}
int x_strcmp(char *si, char *di)
{
while(*si && *di && *si==*di)
{
si++;
di++;
}
return *si-*di;
}
这么变态的也让你们做。。
50348 zxl0714 1357 Accepted 40K 15MS G++ 1.28K 2007-04-18 19:24:23
#include <stdio.h>
int identf(char *str);
int isKey(char *str);
int x_strcmp(char *si, char *di);
int main()
{
char buffer[256];
int n,i;
scanf("%d",&n);
gets(buffer);
for (i=0;i<n;i++){
gets(buffer);
if(identf(buffer))
puts("yes");
else
puts("no");
}
return 0;
}
int identf(char *str)
{
int flag=0;
char *p=str;
if((*str>='a' && *str<='z') || (*str>='A' && *str<='Z') || *str=='_')
{
flag=1;
str++;
}
while(*str && flag)
{
if((*str>='a' && *str<='z') || (*str>='A' && *str<='Z') || *str=='_'
|| (*str>='0' && *str<='9'))
{
flag=1;
str++;
}
else
flag=0;
}
if(flag)
flag=isKey(p);
return flag;
}
int isKey(char *str)
{
char *keyword[]={"auto", "break", "case", "char", "const", "continue", "default",
"do", "double", "else", "enum", "extern", "float", "for", "goto",
"if", "int", "long", "register", "return", "short", "signed",
"sizeof", "static", "struct", "switch", "typedef", "union", "unsigned",
"void", "volatile", "while"};
int i, flag=1;
for(i=0; i<32; i++)
{
if(x_strcmp(str, keyword[i])==0)
{
flag=0;
break;
}
}
return flag;
}
int x_strcmp(char *si, char *di)
{
while(*si && *di && *si==*di)
{
si++;
di++;
}
return *si-*di;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int n;
scanf("%d",&n);
char a[100][50];
int i=0;
while(i<n)
{
scanf("%s",a[i]);
i++;
}
i=0;
int j=0;
while(i<n)
{
if(a[i][0]>='0'&&a[i][0]<='9')
{
printf("no\n");
i++;
continue;
}
while(j<strlen(a[i]))
{
if(a[i][j]>='a'||a[i][j]<='z'||a[i][j]>='A'||a[i][j]<='Z'||a[i][j]=='_')
j++;
else
{
printf("no\n");
j=0;
break;
}
}
if(j==strlen(a[i]))
{
printf("yes\n");
j=0;
}
i++;
}
还有关键字也是不合法的,但难以全部列出来,输入时注意就行了!
scanf("%d",&n);
char a[100][50];
int i=0;
while(i<n)
{
scanf("%s",a[i]);
i++;
}
i=0;
int j=0;
while(i<n)
{
if(a[i][0]>='0'&&a[i][0]<='9')
{
printf("no\n");
i++;
continue;
}
while(j<strlen(a[i]))
{
if(a[i][j]>='a'||a[i][j]<='z'||a[i][j]>='A'||a[i][j]<='Z'||a[i][j]=='_')
j++;
else
{
printf("no\n");
j=0;
break;
}
}
if(j==strlen(a[i]))
{
printf("yes\n");
j=0;
}
i++;
}
还有关键字也是不合法的,但难以全部列出来,输入时注意就行了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询