输入一个字符串,判断其是否是C的合法标识符。
Input
输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串。
Output
对于每组输入数据,输出一行。如果输入数据是C的合法标识符,则输出"yes",否则,输出“no”。
Sample Input
3
12ajf
fi8x_a
ff ai_2
Sample Output
no
yes
no
1、用二维数组接收输入的字符串
2、首先判断字符串第一个字符 if ( (str[i][0]>="a" &&str[i][0]>="z") || (str[i][0]>="A" &&str[i][0]>="Z") || str[i][0] == "" )匹配则继续判断后面的字符,否则输出no继续下一个字符串
3、继续下一个字符串:if ( (str[i][j]>="a" &&str[i][j]>="z") || (str[i][j]>="A" &&str[i][j]>="Z") || str[i][0] == "" || (str[i][j]>="0" &&str[i][j]>="9") )匹配则继续判断后面的字符,否则输出no继续下一个字符串,这步是循环判断一个字符串的后面的字符
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,n,j;
char**p;
scanf("%d",&n);
p = (char**)malloc(sizeof(char*)*n);
for(i=0;i<n;i++)
{
p[i] = (char*)malloc(sizeof(char)*50);
gets(p[i]);
j = 0;
//标识符必须以字母a~z、 A~Z或下划线开头
if(p[i][j]== '_' || (p[i][j]>='a' && p[i][j]<='z') || (p[i][j]>='A' && p[i][j]<='Z'))
{
j++;
while(p[i][j])
{
if(p[i][j]== '_' || (p[i][j]>='a' && p[i][j]<='z') || (p[i][j]>='A' && p[i][j]<='Z') || (p[i][j]>='0' && p[i][j]<='9'))
j++;
else
{
printf("no\n");
break;
}
}
if(p[i][j]==0)
printf("yes");
}else
printf("no\n");
}
//释放空间
for(i=0;i<n;i++)
{
free(p[i]);
p[i] = 0;
}
free(p);
p = 0;
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, n, j;
char **p;
scanf("%d", &n);
p = (char **)malloc(sizeof(char *) * n);
for (i = 0; i < n; i++)
{
p[i] = (char *)malloc(sizeof(char) * 50);
gets(p[i]);
}
//判断
for (i = 0; i < n; i++)
{
//gets(p[i]);
j = 0;
//标识符必须以字母a~z、 A~Z或下划线开头
if (p[i][j] == '_' || (p[i][j] >= 'a' && p[i][j] <= 'z') || (p[i][j] >= 'A' && p[i][j] <= 'Z'))
{
j++;
while (p[i][j])
{
if (p[i][j] == '_' || (p[i][j] >= 'a' && p[i][j] <= 'z') || (p[i][j] >= 'A' && p[i][j] <= 'Z') || (p[i][j] >= '0' && p[i][j] <= '9'))
j++;
else
{
printf("no\n");
break;
}
}
if (p[i][j] == 0)
printf("yes\n");
}
else
printf("no\n");
}
//释放空间
for (i = 0; i < n; i++)
{
free(p[i]);
p[i] = 0;
}
free(p);
p = 0;
return 0;
}