1. 程式人生 > >判斷合法識別符號(c語言)

判斷合法識別符號(c語言)

編寫一個判斷合法識別符號的程式。要求輸入一個正整數 repeat (0<repeat<10),做 repeat 次下列運算:

輸入一個以回車結束的字串(少於80個字元),判斷其是否符合c++規定的識別符號(以字母或下劃線開頭的由字母、數字、下劃線組成的字串)。

輸入輸出示例:括號內為說明

輸入樣例:

4 (repeat=4)
1num
_abc
Int_2
Abc def

輸出樣例:

No
Yes
Yes
No
#include<stdio.h>
#define M 9
#define N 80
int IsValidChar(char c)//最開頭判斷是否是下劃線、大小寫字母
{
 int r=0;          //預設不合法
 if((c>='a'&&c<='z')||(c>='A'&&c<='Z')||(c=='_'))
 {
  r=1;
 }
 return r;
}  
int IsNumberChar(char c) //結合上面函式判斷開頭後是否是數字、下劃線、大小寫字母
{
 int r=0;        //預設不合法
 if(c=='0'||c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='6'||c=='7'||c=='8'||c=='9')
 {
  r=1;
 }
 return r;
}
int main()
{
 int i,j,repeat;
 char ch[M][N];
 scanf("%d",&repeat);
 getchar();//將scanf函式的回車吃掉
 for(i=0;i<repeat;i++)
 {
  gets(ch[i]);   //此處ch陣列名不變,但是[i]後面不寫
 }
 for(i=0;i<repeat;i++)       //開始行迴圈(總共repeat個字串需檢測)
 {
  for(j=0;j<N;j++)        //開始列迴圈(檢測每個字元)
  {
   if(ch[i][j]=='\0')             
   {
    if(j==0)                   //如果開頭檢測到回車,不符合規定,立即輸出NO,開始下一行迴圈
    {
     puts("No");
     break;
    }
    else /*如果執行到了這裡,說明經過自定義函式檢測後都沒跳出No,且已經按下回車結束符,則符合規定*/                  
    {
     puts("Yes");
     break;
    }
   }
   if(j==0)                //參見自定義函式的定義,返回的值為0時,均不符合,輸出NO,開始下一行迴圈(if(!flag)<->flag=0)
   {
    if(!IsValidChar(ch[i][0]))   
    {
     puts("No");
     break;
    }
   }
   else
   {
    if(!(IsValidChar(ch[i][j])||IsNumberChar(ch[i][j])))
    {
     puts("No");
     break;
    }
   }
  }
 }
}