C言語正当識別子HDU 2024
C言語正当識別子Time Limit:2000/1000 MS(Java/others)Memory Limit:65536/32768 K(Java/others)Total Submission(s):44023 Accepted Submission(s):17685
Problem Description
Cの正当な識別子かどうかを判断する文字列を入力します.
Input
入力データには複数のテストインスタンスが含まれ、データの最初の行は整数nであり、テストインスタンスの数を表し、次いでn行入力データであり、各行は50を超えない文字列である.
Output
入力データのセットごとに1行出力します.入力データがCの正当な識別子である場合、「yes」が出力され、そうでない場合、「no」が出力される.
Sample Input
3 12ajf fi8x_a ff ai_2
Sample Output
no yes no
Author
lcy
はい、この問題を今、ツッコミを入れてみると、gets関数はstring.hヘッダファイルにあると思っていました.2回目にstringが加わったまで.hヘッダファイルgetsがまだ使えない場合、資料を調べてみるとstdio.hの中にいることに気づきました.汗ですね!!!やっぱり基礎がしっかりしていない...
この問題は比較的簡単で,一つの関数でアルファベットの種類を判断すればよい.
Problem Description
Cの正当な識別子かどうかを判断する文字列を入力します.
Input
入力データには複数のテストインスタンスが含まれ、データの最初の行は整数nであり、テストインスタンスの数を表し、次いでn行入力データであり、各行は50を超えない文字列である.
Output
入力データのセットごとに1行出力します.入力データがCの正当な識別子である場合、「yes」が出力され、そうでない場合、「no」が出力される.
Sample Input
3 12ajf fi8x_a ff ai_2
Sample Output
no yes no
Author
lcy
はい、この問題を今、ツッコミを入れてみると、gets関数はstring.hヘッダファイルにあると思っていました.2回目にstringが加わったまで.hヘッダファイルgetsがまだ使えない場合、資料を調べてみるとstdio.hの中にいることに気づきました.汗ですね!!!やっぱり基礎がしっかりしていない...
この問題は比較的簡単で,一つの関数でアルファベットの種類を判断すればよい.
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
char inputs[51];
int judge(char ch)
{
if(ch == '_' ) return 2;
else if(ch <='9'&&ch >= '0') return 1;
else if(ch >='a' && ch <= 'z' || ch >='A' && ch <='Z') return 3;
else return 0;
}
int main()
{
int i,n,len;
while(cin >> n)
{
getchar();
while(n--)
{
gets(inputs);
if( (judge(inputs[0]) < 2)) cout << "no" << endl;
else
{
len = strlen(inputs);
for(i = 0; i < len; i++)
if(!judge(inputs[i]))
{
cout << "no" << endl;
break;
}
if(i == len) cout << "yes" << endl;
}
}
}
return 0 ;
}