1.7プログラミング基礎の文字列:06合法C識別子

1886 ワード

合計時間制限:
1000ms
メモリの制限:
65536kB
説明
空白文字を含まない文字列を指定して、C言語の合法的な識別記号かどうかを判断してください(注:テーマはこれらの文字列が必ずC言語の保留字ではないことを保証します).
C言語識別子要求:
1.非予約語
2.アルファベット、数値およびアンダースコアのみを含む("").
3.数字で始まることはありません.
入力
空白の文字が含まれず、20未満の長さの文字列を含む行.
しゅつりょく
C言語の正当な識別子である場合はyesを出力し、そうでない場合はnoを出力します.
サンプル入力
RKPEGX9R;TWyYcp

サンプル出力
no

ソース
北京大学計算概論06心理及び信管期末試験
これを見て、私はとても驚いて、良い水の1つの問題!
そして最初からそう
#include
#include
char a[25];
int main()
{
    gets(a);
        if(((a[0]>='a'&&a[0]<='z')||(a[0]'Z')||a[0]=='_')&&((a[i]>='0'&&a[i]<='9')||(a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z')||a[i]=='_'))
        {
            printf("yes");
            return 0;
        }
    printf("no");
    return 0;
}

提出が間違っていることに気づいた!
ずっとチェックしていたが、気づかなかった.
for(unsigned int i=0;i<=strlen(a);i++)
ここ!
私は以前配列の中の[1番要素を使うのが好きだったのでstrlen(a)を使っていたのですが、今回使った配列[0]が装着され始め、最後まで運行していたときに'0'まで運行していたので、間違っていました...
次は正しい答えを貼ります.
#include
#include
char a[25];
int main()
{
	gets(a);
	for(unsigned int i=0;i<=strlen(a)-1;i++)
		if(((a[0]>='a'&&a[0]<='z')||(a[0]>='A'&&a[0]<='Z')||a[0]=='_')&&((a[i]>='0'&&a[i]<='9')||(a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z')||a[i]=='_'));
			else
			{
				printf("no");
				return 0;
			}
	printf("yes");
	return 0;
 }

これからも注意して、配列の大きさに注意しましょう.の