首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

HDOJ 2024 C語言合法標識符判斷:規則解析與代碼實現

     編輯:C++ 入門

問題描述

輸入多行字符串,判斷每行是否為 C 語言合法標識符。
規則:
1. 首字符只能是字母 (A-Z, a-z) 或下劃線 '_'
2. 其餘字符只能是字母、數字 (0-9) 或下劃線
長度 ≤ 50,多測試用例。

判斷邏輯

  1. 讀入整數 n,消耗換行符
  2. 逐行讀取字符串 (含空格? 樣例無空格,用 getline 更稳妥)
  3. 檢查首字符:isalpha(s[0]) || s[0]=='_'
  4. 遍歷所有字符:isalnum(c) || c=='_'
  5. 全滿足輸出 "yes",否則 "no"

參考代碼

#include <iostream>
#include <string>
#include <cctype>
using namespace std;

int main() {
    int n; string s;
    cin >> n; getchar(); // 吸收換行
    while (n--) {
        getline(cin, s);
        bool ok = true;
        if (s.empty() || !(isalpha(s[0]) || s[0] == '_')) ok = false;
        for (char c : s)
            if (!(isalnum(c) || c == '_')) { ok = false; break; }
        cout << (ok ? "yes" : "no") << endl;
    }
    return 0;
}

樣例驗證

輸入:
3
12ajf
fi8x_a
ff ai_2

輸出:
no
yes
no
  • 12ajf:首字符是數字 → no
  • fi8x_a:首字母,其餘字母數字下劃線 → yes
  • ff ai_2:含空格 → no (空格非字母數字下劃線)

易錯點

  • 空字符串:非法 (無首字符)
  • 關鍵字 (如 int) 在 C 標準中也是合法標識符 (雖不能作變量名),本題不排除關鍵字
  • 大小寫敏感:isalpha 涵蓋 A-Z/a-z
  • 輸入行可能含前導/尾隨空格,getline 會讀入,需按題意決定是否 trim;樣例第三行 ff ai_2 含中間空格直接判非法

複雜度

O(L) 每字符串,L ≤ 50,極快。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved