#2024
首先应该对c语言的合法标志符有一定的认识。
C语言合法标志符:标识符只能由字母(A-Z, a-z)、数字(0~9)和下划线(_)组成,并且第一个字符必须是字母或下划线,不能是数字。同时C语言标志符不能为有特殊含义的关键字。
以下是合法的标识符:
abc, xyz, x3, BOOK_1, sum5
以下是非法的标识符:
3s 不能以数字开头
sT 出现非法字符
-3x 不能以减号(-)开头
bowy -1 出现非法字符减号(-),出现非法字符空格
在本题中没有对关键字的标识符给出明确的界定,也就是关键字在可接受范围内。但是c语言的关键字这里也补充一下吧,以免自己之后忘记了。
数据类型
1、char:字符类型,1个字节,8位
2、int:整数类型,4个字节,32位
3、float:浮点数类型,4个字节,32位,保留8位有效数字
4、double:双精度类型,8个字节,64位,保留16位有效数字
5、short:短整数类型,2个字节,16位
6、long:长整数类型,8个字节,64位
7、signed:有符号类型
8、unsigned:无符号类型
9、enum:枚举类型
10、union:共同体类型,使几个不同类型的变量共占一段内存(相互覆盖)
11、struct:结构体类型,把不同类型的数据组合成一个整体-------自定义数据
12、void:声明函数无返回值或无参数
控制类型
13、for:循环语句
14、do:循环语句
15、while:循环语句
16、break:跳出当前循环
17、continue:跳出当前循环,开始下一次的循环
18、if:条件语句
19、else:分支语句
20、goto:无条件跳转语句,少用
21、switch:分支语句
22、case:和switch组合使用
23、default:其他分支
24、return:子程序返回语句
存储类型
25、auto:声明自动变量,很少用到
26、extern:声明变量是在其他文件中声明,引用变量
27、register:声明寄存器变量
28、static:静态变量
其他类型
29、const:声明只读变量
30、sizeof:计算数据类型长度
31、typedef:给数据类型取名
32、volatile:变量在程序执行中可以被隐含地改变
回到题目,注意需要对第一次读取测试用例个数之后读取换行符,不然会读取出错。这里使用了isaplha()可以判断开头是否为字母,以及isalnum()函数判断是否为字母或者数字,需要在头部文件中导入ctype.h头文件
题目直达
http://acm.hdu.edu.cn/showproblem.php?pid=2024
AC代码
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctype.h> //快速检验类型的头文件
using namespace std;
int main() {
int c;
cin>>c;
getchar();
while(c--) {
char str[51];
gets(str);
int len=strlen(str);
int flag=0;
if(!isalpha(str[0]) && str[0]!='_') {
flag++;
}
for(int i=1; i<len; i++) {
if(!isalnum(str[i]) && str[i]!='_') {
flag++;
}
}
if(flag==0) {
cout<<"yes"<<endl;
} else {
cout<<"no"<<endl;
}
}
return 0;
}