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

C語言實作:合法 C 識別符檢查(字元規則驗證)

     編輯:關於C語言

C 識別符命名規則驗證程式

本程式讀取一行字串,判斷其是否符合 C 語言識別符命名規則:
1. 首字元必須為字母(大小寫)或底線 _。
2. 其餘字元可為字母、數字或底線。
3. 不允許其他符號(如 @, $, 空格等)。

程式碼邏輯

  1. 用 gets() 讀取整行(含空格,但識別符不含空格)。
  2. 檢查首字元 a[0] 是否合法。
  3. 若首字元合法,遍歷剩餘字元 a[1]~a[len-1]。
  4. 若發現非法字元,設 flag=0 並 break。
  5. 最後依 flag 輸出 YES 或 NO。

完整程式碼


#include <stdio.h>
#include <string.h>

int main()
{
    int i, len, flag = 1;
    char a[100];

    gets(a);
    len = strlen(a);

    if((a[0] >= 'a' && a[0] <= 'z') ||
       (a[0] >= 'A' && a[0] <= 'Z') ||
       (a[0] == '_'))
    {
        for(i = 1; i < len; i++)
        {
            if((a[i] >= 'a' && a[i] <= 'z') ||
               (a[i] >= 'A' && a[i] <= 'Z') ||
               (a[i] >= '0' && a[i] <= '9') ||
               (a[i] == '_'))
            {
                flag = 1;
            }
            else
            {
                flag = 0;
                break;
            }
        }
        if(flag) printf("YES");
        else printf("NO");
    }
    else
    {
        printf("NO");
    }
    return 0;
}

執行結果示意

識別符檢查1

識別符檢查2

測試案例

輸入輸出說明
validNameYES合法
_privateYES底線開頭合法
name123YES含數字合法
123invalidNO數字開頭非法
has@symbolNO含 @ 非法
has spaceNO含空格非法
NO空字串(首字元檢查失敗)

安全性與標準符合性補充

  • gets() 危險:無緩衝區長度限制,必須改用 fgets(a, sizeof(a), stdin) 並移除尾部換行符。
  • C99/C11 允許通用字元名稱 (UCN):如 \uXXXX、\UXXXXXXXX,本程式未處理。
  • 關鍵字檢查:合法識別符不能是關鍵字(int, while 等),本程式未檢查。若需完整驗證需建立關鍵字表比對。
  • 長度限制:C 標準要求編譯器至少支援 63 字元(外部識別符 31 字元),本程式未限長。

改進版核心邏輯


bool isValidIdentifier(const char* s) {
    if(!s || !*s) return false;
    // 首字元
    if(!isalpha(*s) && *s != '_') return false;
    // 其餘字元
    for(++s; *s; ++s) {
        if(!isalnum(*s) && *s != '_') return false;
    }
    // 可選:關鍵字檢查
    return true;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved