本程式讀取一行字串,判斷其是否符合 C 語言識別符命名規則:
1. 首字元必須為字母(大小寫)或底線 _。
2. 其餘字元可為字母、數字或底線。
3. 不允許其他符號(如 @, $, 空格等)。
gets() 讀取整行(含空格,但識別符不含空格)。a[0] 是否合法。a[1]~a[len-1]。flag=0 並 break。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;
}


| 輸入 | 輸出 | 說明 |
|---|---|---|
| validName | YES | 合法 |
| _private | YES | 底線開頭合法 |
| name123 | YES | 含數字合法 |
| 123invalid | NO | 數字開頭非法 |
| has@symbol | NO | 含 @ 非法 |
| has space | NO | 含空格非法 |
| NO | 空字串(首字元檢查失敗) |
fgets(a, sizeof(a), stdin) 並移除尾部換行符。\uXXXX、\UXXXXXXXX,本程式未處理。int, while 等),本程式未檢查。若需完整驗證需建立關鍵字表比對。
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;
}