算法做题记录05

目录

标识符

题目描述

代码


标识符

题目描述

在 C++ 中,标识符是用于标识某个实体的“名字”。这里,我们定义标识符是满足以下条件的非空字符串:

  1. 串长 ≤32;
  2. 仅由数字 0 到 9、大写字母 A 到 Z、小写字母 a 到 z、下划线 __、美金符号 $ 组成;
  3. 第一个字符不是数字。

给定若干字符串,一行一个,要求分别判断它们是否是满足条件的标识符。

请注意,请不要混淆标识符和 C++ 中变量的定义,例如有以下区别:

  1. 以 * 开头(指针),结尾有 [](数组)等情况均不属于标识符,输入中多次出现同样的字符串不需要额外判断重名。
  2. 本题的定义中,不允许标识符中出现转义符 \。
  3. C++ 关键字等也属于标识符。
  4. 其他与 C++ Standard 冲突的事项在本题中均以上述定义为准,例如不同的编译器对串长的限制可能不同。

输入格式

第一行一个数 T,表示需要判断的组数。

接下来每行一个串 S。注意,所在行的换行不是 S 的一部分。

输入满足一行一串,不存在额外的空行(除了文件末尾)。

输出格式

输出 T 行。每行输出 OK 或 CE,分别表示合法或不合法。

样例输入

6
int
_123_
0xFF
_
Hello World
\u4f60\u53d1\u73b0\u4e86\u5f69\u86cb\uff01

样例输出

OK
OK
CE
OK
CE
CE

数据范围

令 |S| 表示字符串 S 的长度。

对于前 30% 的数据,|S|=1。

对于前 60% 的数据,S 非空且仅由数字和大小写字母组成。

对于前 80% 的数据,S 中无空格。

对于 100% 的数据,1≤T≤10,0≤|S|,∑|S|≤1000。

保证 S 由可打印 ASCII 字符(ASCII 码范围 32∼126)组成。比如,S 中不会出现换行、制表符或汉字。

时间限制:1s;空间限制:64MB。

提示

请仔细读题,注意特殊边界情况。

代码

#include<iostream>
#include<cstring>
using namespace std;
char a[1005];
int check(char m[]){
	if(strlen(m)>32||strlen(m)==0) return 0;
	int n=strlen(m);
	for(int i=0;i<n;i++){
		if(!((m[i]>='0'&&m[i]<='9')||(m[i]>='a'&&m[i]<='z')||(m[i]>='A'&&m[i]<='Z')||m[i]=='$'||m[i]=='_'))
		return 0;
		else if(m[i]=='\\')
		return 0;
	}
	
	if(m[0]>='0'&&m[0]<='9') return 0;
	return 1;
}
int main(){
	int n;
	cin>>n;
	getchar();
	for(int i=0;i<n;i++){
		gets(a);
		if(check(a)) cout<<"OK"<<endl;
		else cout<<"CE"<<endl;
	}
	return 0;
}

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值