【C++题解】标识符格式

本蒟蒻的第二篇题解,望大家多多见谅!

P a r t Part Part 1 1 1 读题

题目描述

输入若干个只包含大小写字母、数字、标点的字符串,判断他们是否符合C++标识符(变量名、函数名、结构体/类名等)的命名规则。

输入格式

第一行是一个正整数 T T T,表示数据的组数;

之后 T T T行,每行一个只包含大小写字母、数字、标点的字符串,每个字符串长度介于1与30之间。
ifelseint等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 T100

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"

听完后,是不是觉得很简单呢?赶快自己去试一下吧!!!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
引用\[1\]:这段代码是一个解决LeetCode上某个题目的C++实现,具体是一个双指针的解法。该题目是计算一个数组中的积水量。代码中使用了两个指针分别指向数组的左右边界,然后通过比较左右指针所指向的元素的大小,来确定当前位置的积水量。具体的计算方法是,如果左指针所指向的元素小于右指针所指向的元素,则对左指针的左边进行操作,如果左指针所指向的元素大于等于右指针所指向的元素,则对右指针的右边进行操作。在每一次操作中,都会更新左边的最大值和右边的最大值,并计算当前位置的积水量。最后返回总的积水量。\[1\] 引用\[2\]:这段代码是另一个解决LeetCode上某个题目的C++实现,具体是一个深度优先搜索的解法。该题目是计算一个二维网格中从起点到终点的可行路径数量。代码中使用了递归的方式进行深度优先搜索,从起点开始,每次向下或向右移动一步,直到到达终点。在每一步移动中,会判断当前位置是否有障碍物,如果有障碍物则返回0,如果到达终点则返回1,否则继续递归搜索下一步的位置。最后返回总的可行路径数量。\[2\] 引用\[3\]:这段代码是另一个解决LeetCode上某个题目的C++实现,具体是一个动态规划的解法。该题目是计算一个数组中的积水量。代码中使用了动态规划的思想,通过遍历数组中的每个元素,分别计算该元素左边和右边的最大值,并计算当前位置的积水量。最后返回总的积水量。\[3\] 综上所述,这三段代码分别是解决LeetCode上不同题目的C++实现,分别使用了双指针、深度优先搜索和动态规划的方法来解决问题。 #### 引用[.reference_title] - *1* *3* [Leetcode 热题100 42.接雨水(C++ 多种解法,错过可惜)](https://blog.csdn.net/qq_51933234/article/details/124637883)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [[C++]Leetcode 不同路径 || 解题思路及详解](https://blog.csdn.net/weixin_62712365/article/details/123951736)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值