【GESP】C++三级练习 luogu-B2155 合法 C 标识符
GESP三级练习,字符串练习(C++三级大纲中6号知识点,字符串),难度★★☆☆☆。
luogu-B2155 合法 C 标识符
题目要求
题目描述
给定一个不包含空白符的字符串,请判断是否是 C 语言合法的标识符号。题目保证这些字符串一定不是 C 语言的保留字。
C 语言标识符要求:
- 非保留字;
- 只包含字母、数字及下划线(
_
);- 不以数字开头。
输入格式
一行,包含一个字符串,字符串中不包含任何空白字符,且长度不大于 $20$。
输出格式
一行,如果它是 C 语言的合法标识符,则输出 yes,否则输出 no。
输入输出样例 #1
输入 #1
1
RKPEGX9R;TWyYcp
输出 #1
1
no
题目分析
解题思路
- 读取一个字符串str
- 检查字符串的首字符:
- 必须是字母或下划线,否则输出”no”并结束程序
- 遍历字符串中的每个字符:
- 检查当前字符是否为合法字符(字母、数字或下划线)
- 如果出现非法字符:
- 输出”no”并结束程序
- 如果所有字符都合法,输出”yes”
复杂度分析:
- 时间复杂度为 $O(n)$,其中n为字符串长度
- 空间复杂度为 $O(1)$,只需要存储输入的字符串
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <string>
int main() {
// 定义字符串变量用于存储输入
std::string str;
// 从标准输入读取字符串
std::cin >> str;
// 检查首字符是否合法(必须是字母或下划线)
if (!(str[0] >= 'a' && str[0] <= 'z') &&
!(str[0] >= 'A' && str[0] <= 'Z') && str[0] != '_') {
std::cout << "no";
return 0;
}
// 遍历字符串的每个字符
for (int i = 0; i < str.length(); i++) {
// 检查每个字符是否为合法字符(数字、字母或下划线)
if (!(str[i] >= '0' && str[i] <= '9') &&
!(str[i] >= 'a' && str[i] <= 'z') &&
!(str[i] >= 'A' && str[i] <= 'Z') && str[i] != '_') {
std::cout << "no";
return 0;
}
}
// 所有检查都通过,输出yes
std::cout << "yes";
return 0;
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页
“luogu-”系列题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
本文由作者按照 CC BY 4.0 进行授权