判斷合法識別符號(c語言)
阿新 • • 發佈:2018-12-22
編寫一個判斷合法識別符號的程式。要求輸入一個正整數 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;
}
}
}
}
}