【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 学习专题站:GESP WIKI
“luogu-”系列题目可在洛谷题库进行在线评测。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
欢迎加入:Java、C++、Python技术交流QQ群(982860385),大佬免费带队,有问必答
欢迎加入:C++ GESP/CSP认证学习QQ频道,考试资源总结汇总
欢迎加入:C++ GESP/CSP学习交流QQ群(688906745),考试认证学员交流,互帮互助
 本文由作者按照  CC BY-NC-SA 4.0  进行授权
