【2024 C言語正当識別子】

1842 ワード


C言語正当識別子
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 28233    Accepted Submission(s): 11358
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

 
 
この問題はC言語の合法的な識別子の命名規則をつかむだけでよい(1、頭要素は下線またはアルファベットのみ、2、頭要素を除く要素は数字、下線、アルファベットのみ)、入力した文字列の頭要素が規則に合致するかどうかを判断してから、他の要素を判断する.文字列が入力されているので、要素が数字かどうかを判断するときは文字数字と判断します!!!
#include<iostream>
using namespace std;
#include<string>
int main(){
	int n;
	char s[100];
	cin>>n;
	getchar();
	while(n--){
		gets(s);
		for(int ix=0;ix!=strlen(s);ix++){
			if(ix==0){
				if(s[0]=='_'||isalpha(s[0]))
					continue;
				else
					break;
			}
			if(isalnum(s[ix])||s[ix]=='_')
				continue;
			else
				break;
		}
		if(ix==strlen(s))
			cout<<"yes"<<endl;
		else 
			cout<<"no"<<endl;
	}

}

まとめ:テキストgets()を1行読み込むことを学習します.
改行またはEOFが受け入れられるまでstdinストリームから文字列を読み込み、bufferポインタが指す文字配列に読み込みの結果を格納します.改行は読み出し列の内容ではなく、読み出した改行はnull値に変換され、文字列が終了する.