本蒟蒻的第二篇题解,望大家多多见谅!
P a r t Part Part 1 1 1 读题
输入若干个只包含大小写字母、数字、标点的字符串,判断他们是否符合C++标识符(变量名、函数名、结构体/类名等)的命名规则。
输入格式
第一行是一个正整数 T T T,表示数据的组数;
之后
T
T
T行,每行一个只包含大小写字母、数字、标点的字符串,每个字符串长度介于1与30之间。
if、else、int等C++保留字不会出现在输入数据中。
之后 T T T行,每行先是待分割的字符串,然后是分隔符。字符串只包含大小写字母、数字和标点,长度不超过 100 100 100;分隔符只可能是标点之一。
输出格式
输出 T T T行。对于每个字符串输出一行,若它符合C++标识符的命名规则,则输出 Y e s Yes Yes,否则输出 N o No No。
输入样例
5
TestCase
TestCase-WithHyphen
TestCase_WithUnderline
TestCase,WithComma
TestCaseWith123
输出样例
Yes
No
Yes
No
Yes
数据范围与提示
T
≤
100
T≤100
T≤100
P a r t Part Part 2 2 2 思路
根据题意,可以知道要求是检查字符串是否符合C++标识符的命名规则,然后进行输出,那么首先请大家回忆一个知识点:
C++标识符的命名规则
知识点回顾:
1. 1. 1.标识符由数字、字母以及下划线( _ )组成
2. 2. 2.第一位不可以是数字
此题并未用到但仍需回顾的两点:
3. 3. 3.区分大写字符与小写字符
4. 4. 4.不能将C++关键字用作名称(此题并未用到)
由此,我们知道了字符串是否符合C++标识符的命名规则的判断方式,可以编写代码啦!
小tip:大家可以先根据思路,写一下代码哦!
P a r t Part Part 3 3 3 代码
方法1:暴力枚举法
#include<bits/stdc++.h>
using namespace std;
int n;
string s;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>s;
int len=s.length();
//这里采用字符串来求长度
for(int j=0;j<len;j++){
if(j==0){
//有点小复杂,但是通俗易懂,这里判断的就是第一位是否不为数字(即:是字母或下划线)
if(s[j]==65||s[j]==66||s[j]==67||s[j]==68||s[j]==69||s[j]==70||s[j]==71||s[j]==72||s[j]==73||s[j]==74||s[j]==75||s[j]==76||s[j]==77||s[j]==78||s[j]==79||s[j]==80||s[j]==81||s[j]==82||s[j]==83||s[j]==84||s[j]==85||s[j]==86||s[j]==87||s[j]==88||s[j]==89||s[j]==90||s[j]==97||s[j]==98||s[j]==99||s[j]==100||s[j]==101||s[j]==102||s[j]==103||s[j]==104||s[j]==105||s[j]==106||s[j]==107||s[j]==108||s[j]==109||s[j]==110||s[j]==111||s[j]==112||s[j]==113||s[j]==114||s[j]==115||s[j]==116||s[j]==117||s[j]==118||s[j]==119||s[j]==120||s[j]==121||s[j]==122||s[j]==95){
if(len==1){//判断长度是否为1,如果为1直接输出就好了(就因为忘了这个丢分了555),所以大家一定要注意!!!
cout<<"Yes"<<endl;
break;
}
else continue;
}
else{
cout<<"No"<<endl;
break;
}
}
//从第二位数开始才会进入这一循环(判断第一位最后全部跳出循环),进行检查:是否符合C++标识符的命名规则(即:是否由数字、字母和下划线组成)
if(s[j]==48||s[j]==49||s[j]==50||s[j]==51||s[j]==52||s[j]==53||s[j]==54||s[j]==55||s[j]==56||s[j]==57||s[j]==65||s[j]==66||s[j]==67||s[j]==68||s[j]==69||s[j]==70||s[j]==71||s[j]==72||s[j]==73||s[j]==74||s[j]==75||s[j]==76||s[j]==77||s[j]==78||s[j]==79||s[j]==80||s[j]==81||s[j]==82||s[j]==83||s[j]==84||s[j]==85||s[j]==86||s[j]==87||s[j]==88||s[j]==89||s[j]==90||s[j]==97||s[j]==98||s[j]==99||s[j]==100||s[j]==101||s[j]==102||s[j]==103||s[j]==104||s[j]==105||s[j]==106||s[j]==107||s[j]==108||s[j]==109||s[j]==110||s[j]==111||s[j]==112||s[j]==113||s[j]==114||s[j]==115||s[j]==116||s[j]==117||s[j]==118||s[j]==119||s[j]==120||s[j]==121||s[j]==122||s[j]==95){
//判断是否为最后一个字符
if(j==(len-1))cout<<"Yes"<<endl;
else continue;
}
else{
cout<<"No"<<endl;
break;
}
}
}
return 0;
}
方法2:判断大小法(简单了很多)
#include<bits/stdc++.h>
using namespace std;
int n;
string s;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>s;
int len=s.length();
//这里采用字符串来求长度
for(int j=0;j<len;j++){
if(j==0){
//这里判断的就是第一位是否不为数字(即:是字母或下划线)
if((s[j]>=65&&s[j]<=90)||(s[j]>=97&&s[j]<=122)||s[j]==95){
if(len==1){//判断长度是否为1,如果为1直接输出就好了(就因为忘了这个丢分了555),所以大家一定要注意!!!
cout<<"Yes"<<endl;
break;
}
else continue;
}
else{
cout<<"No"<<endl;
break;
}
}
//从第二位数开始才会进入这一循环(判断第一位最后全部跳出循环),进行检查:是否符合C++标识符的命名规则(即:是否由数字、字母和下划线组成)
if(s[j]>=48&&s[j]<=57||s[j]>=65&&s[j]<=90||s[j]>=97&&s[j]<=122||s[j]==95){
//判断是否为最后一个字符
if(j==(len-1))cout<<"Yes"<<endl;
else continue;
}
else{
cout<<"No"<<endl;
break;
}
}
}
return 0;
}
P a r t Part Part 4 4 4 总结
本题考察C++标识符的命名规则,并用此作为判断条件,根据要求输出" Y e s Yes Yes"或" N o No No"
听完后,是不是觉得很简单呢?赶快自己去试一下吧!!!