题目
核心思路
读入字符串后,按照合法标识符的定义进行判断:
- 第一个字符为字母或者下划线;
- 之后的字符只能为字母或数字或下划线;
代码分享&分析
#include<iostream>
#include<string>
using namespace std;
int main()
{
int n, i, flag=0;
int length;
string str;
cin >> n;
getchar(); // 在输入字符并按下回车键后,缓冲区的字符读入变量中(n),而回车键('\n')仍然在缓冲区中。
//当读入下一字符时,则会读入回车,出现“跳过”读入操作的现象。
// cin.ignore()也可以
while(n--){
getline(cin, str); // 读入一行字符串,与cin区别在于其遇到空格仍可正常读入,cin则会停止读入。
length = str.length(); // str.length() 常用的字符串处理函数,输出字符串的长度
if(length > 50) return 0;
if(str[0] == '_' || (str[0] >= 'a' && str[0] <= 'z') || (str[0] >= 'A' && str[0] <= 'Z')){
// 也可以用c++库函数isdigit()和isalpha()偷懒判断的
flag++;
for(i=1;i<length;i++){
if(str[i] == '_' || (str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= '0' && str[i] <= '9')) flag++;
}
}
if(flag == length) cout << "yes" << endl;
else cout << "no" << endl;
flag = 0;
}
return 0;
}
难点
思路并不复杂,但输入输出着实费了一番功夫。吃一堑长一智吧。