C言語正当識別子HDU 2024

3587 ワード

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の中にいることに気づきました.汗ですね!!!やっぱり基礎がしっかりしていない...
この問題は比較的簡単で,一つの関数でアルファベットの種類を判断すればよい.
#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 ;
}