同学问了我一道hdu的水题
题号是2024 原题地址戳这里
C语言合法标识符
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 86924 Accepted Submission(s): 33443
Problem Description输入一个字符串,判断其是否是C的合法标识符。
Input输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串。
Output对于每组输入数据,输出一行。如果输入数据是C的合法标识符,则输出"yes",否则,输出“no”。
Sample Input312ajffi8x_aff ai_2
Sample Outputnoyesno看到这题 最开始的想法就是 读入字符 然后判断是否在 a~z A~Z 1~9之间标识符由字母、下划线、数字这三个方面组成,但开头必须是字母或下划线。
上代码(最普通的做法)ps:放了同学的代码 她的错误是少写了等号......已改正
#include<iostream> #include<stdio.h> #include<string> using namespace std; int main() { int n,flag; string a[10000]; while(~scanf("%d\n",&n)) { for(int i=0; i<n; i++) getline(cin,a[i]); for(int i=0; i<n; i++) { flag=0; if(a[i][0]=='_'||(a[i][0]>='a'&&a[i][0]<='z')||(a[i][0]>='A'&&a[i][0]<='Z')) { for(int j=1; j<a[i].length(); j++) { if(a[i][j]=='_'||(a[i][j]>='a'&&a[i][j]<='z')||(a[i][j]>='A'&&a[i][j]<='Z')||(a[i][j]>='0'&&a[i][j]<='9')) flag++; else break; } if(flag==a[i].length()-1) cout<<"yes"<<endl; else cout<<"no"<<endl; } else cout<<"no"<<endl; } } return 0; }之后在 讨论区看到了有关用 标准函数 的做法
需要用到 头文件 #include <ctype.h>
先说 判断字母的函数 isalpha( )
#include<iostream> #include<stdio.h> #include<ctype.h> using namespace std; int main() { int n,flag; char c; scanf("%c",&c); int a=isalpha(c);//若 c 为字母,返回非零值;否则,返回0。 printf("%d\n",a);//返回非零值为随机值 与字母大小无关 return 0; }然后是 同时判断字母与数字的函数 isalnum( )
#include<iostream> #include<stdio.h> #include<ctype.h> using namespace std; int main() { int n,flag; char c; scanf("%c",&c); int a=isalnum(c);//若 c 为字母或数字,返回非零值;否则,返回0。 printf("%d\n",a);//返回非零值为随机值 与数字字母大小无关 return 0; }下面放一下用 标准函数 做的代码:#include<iostream> #include<stdio.h> #include<string> #include<ctype.h> using namespace std; int main() { int n,flag; string str; while(~scanf("%d\n",&n)) { getchar(); for (int i=0; i<n; i++) { getline(cin,str); flag=0; if (isalpha(str[0])||str[0]=='_') { flag=1; for (int i=1; str[i]!=0; i++) if (!isalnum(str[i])&&str[i]!='_') { flag=0; break; } } if (flag) printf("yes\n"); else printf("no\n"); } } return 0; }
先这样吧~