HDU-2024 C語言合法標識符


Problem Description
輸入一個字符串,判斷其是否是C的合法標識符。
 
 Input
輸入數據包含多個測試實例,數據的第一行是一個整數n,表示測試實例的個數,然后是n行輸入數據,每行是一個長度不超過50的字符串。
 
 Output
對於每組輸入數據,輸出一行。如果輸入數據是C的合法標識符,則輸出"yes",否則,輸出“no”。
 
 Sample Input
3 12ajf fi8x_a ff ai_2
 
 Sample Output
no yes no
 
思路:很簡單的題,C語言合法標識符定義為僅由字母,數字,下划線構成,且首字符必須為字母或下划線。讀取一個字符串后用循環對每一個字符進行判斷,若每一個字符都合法,則標志變量為0.
 
備注:1.輸入問題。一開始想用cin直接輸入字符串,但是測試數據是有空格的,cin無法讀取空格。后來改用cin.getline(),但是它的操作對象是字符數組。最后才找到getline()函數。
2.判斷問題。一開始是想用ASCII碼進行判斷,但是寫出來的程序略顯冗余,想着寫一個判斷函數,但是代碼量還是沒有得到簡化,最后想起來<cctype>/<ctypr.h>頭文件里有函數可以直接用。
 1 #include<iostream>
 2 #include<cctype>
 3 using namespace std;
 4 int main()
 5 {
 6     int n;
 7     cin >> n;
 8     getchar();
 9     while (n--)
10     {
11         string a;
12         getline(cin,a);
13         if (isalpha(a[0])||a[0]=='_')//isalpha(a)判斷a是否為字母,若是則返回0;
14         {
15             int flag = 1;
16             for (int i = 1; i < a.size(); i++)
17             {
18                 if (isalnum(a[i])|| a[i] == '_') flag=0;//isalnum(a)判斷a是不是字母或數字,若是則返回0;
19                 else { flag++; break; };
20             }
21             if (flag) cout << "no";
22             else cout << "yes";
23         }
24         else cout << "no";
25         cout << endl;
26     }
27     return 0;
28 }
函數名稱 返回值
isalnum() 如果參數是字母數字,即字母或數字,該函數返回true
isalpha() 如果參數是字母,該函數返回真
isblank() 如果參數是空格或水平制表符,該函數返回true
iscntrl() 如果參數是控制字符,該函數返回true
isdigit() 如果參數是數字(0~9),該函數返回true
isgraph() 如果參數是除空格之外的打印字符,該函數返回true
islower() 如果參數是小寫字母,該函數返回true
isprint() 如果參數是打印字符(包括空格),該函數返回true
ispunct() 如果參數是標點符號,該函數返回true
isspace()

如果參數是標准空白字符,如空格、進紙、換行符、回車

、水平制表符或者垂直制表符,該函數返回true

isupper() 如果參數是大寫字母,該函數返回true
isxdigit() 如果參數是十六進制的數字,即0~9、a~f、A~F,該函數返回true
tolower() 如果參數是大寫字符,則返回其小寫,否則返回該參數
toupper() 如果參數是小寫字母,則返回其大寫,否則返回該參數

以上列出了<cctype>函數及用法,轉自https://www.cnblogs.com/zy691357966/p/5480456.html

另:本題未考慮C語言合法標識符不應含有關鍵字,否則更加麻煩。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM