題目:輸入 n 個字符串(長度 ≤50),判斷每個是否為 C 語言合法標識符。規則:
1. 僅含字母(大小寫)、數字、下劃線 _。
2. 首字符必須是字母或下劃線。
輸出 yes 或 no。
isalpha(s[0]) || s[0]=='_'。否則 no。isalnum(c) || c=='_'。遇到非法字符即 no。yes。#include <bits/stdc++.h>
using namespace std;
bool isValid(const string& s) {
if (s.empty()) return false;
if (!isalpha(s[0]) && s[0] != '_') return false;
for (size_t i = 1; i < s.size(); ++i) {
if (!isalnum(s[i]) && s[i] != '_') return false;
}
return true;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n; cin >> n;
string s;
while (n--) {
cin >> s;
cout << (isValid(s) ? "yes" : "no") << '\n';
}
return 0;
}
<cctype> 中的 isalpha、isalnum 簡潔可靠(注意輸入為 unsigned char 或 ASCII 範圍內安全)。isalpha 自動處理。int、for),僅判斷語法形式。| 輸入 | 輸出 | 說明 |
|---|---|---|
| 12ajf | no | 首字符為數字 |
| fi8x_a | yes | 合法 |
| ff ai_2 | no | 含空格(非法字符) |
| _Valid123 | yes | 下劃線開頭合法 |
| invalid-char | no | 連字符非法 |
HDOJ 2024 是基礎字符串檢查題。核心考點:熟悉 C 標識符命名規則,並能準確轉化為代碼邏輯。使用 isalpha/isalnum 可避免手寫 ASCII 範圍判斷的錯誤(如忘記大小寫、遺漏下劃線)。此類題目雖簡單,但體現了對語言詞法規範的理解。