|
发表于 2023-10-15 11:16:45
|
显示全部楼层
这段代码存在以下问题:
1. 如果字符串的第一个字符是数字,则不会进入循环,b变量没有被初始化,最后输出结果不正确。
2. 如果字符串的第一个字符不是字母、数字或下划线,则直接输出no,没有进入循环判断,也没有判断字符串长度是否超过20。
3. 没有考虑到字符串长度超过20的情况。
下面是一个更简单的实现:
- #include <iostream>
- #include <string>
- using namespace std;
- int main() {
- string s;
- cin >> s;
- if (!isalpha(s[0]) && s[0] != '_') {
- cout << "no";
- return 0;
- }
- if (s.size() > 20) {
- cout << "no";
- return 0;
- }
- for (int i = 1; i < s.size(); i++) {
- if (!isalnum(s[ i]) && s[ i] != '_') {
- cout << "no";
- return 0;
- }
- }
- cout << "yes";
- return 0;
- }
复制代码
首先使用string类型读入字符串,判断第一个字符是否是字母或下划线,如果不是则直接输出no。然后判断字符串长度是否超过20,如果是则输出no。最后遍历字符串中的每一个字符,判断是否是字母、数字或下划线,如果不是则输出no。如果遍历完整个字符串都没有输出no,则输出yes。 |
|