HDU 2024 C 언어 합 법 식별 자 [입문]

C 언어 합 법 식별 자
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 80984    Accepted Submission(s): 31241
Problem Description
C 의 합 법 적 인 식별 자 인지 아 닌 지 문자열 을 입력 하 십시오.
 
Input
입력 데 이 터 는 여러 개의 테스트 인 스 턴 스 를 포함 합 니 다. 데이터 의 첫 줄 은 하나의 정수 n 입 니 다. 테스트 인 스 턴 스 의 개 수 를 표시 하고 n 줄 은 데 이 터 를 입력 합 니 다. 줄 마다 길이 가 50 을 넘 지 않 는 문자열 입 니 다.
 
Output
각 그룹의 입력 데이터 에 대해 한 줄 을 출력 합 니 다.입력 데이터 가 C 의 합 법 적 인 식별 자 라면 "yes" 를 출력 합 니 다. 그렇지 않 으 면 "no" 를 출력 합 니 다.
 
Sample Input
 
   
3 12ajf fi8x_a ff ai_2
 

Sample Output
 
   
no yes no
 

Author
lcy
 

Source
C语言程序设计练习(四)


问题链接:HDU2024 C语言合法标识符。

问题简述(略)

问题分析

  C语言的标识符是字母或下划线('_')开头的,字母、下划线('_')和数字的字符串。

程序说明

  本来是用函数scanf()读入字符串的,但是空行(直接输入回车)时,有个小陷阱。所以,改用函数gets(),AC通过。这事情有点费解,细节决定成败。

  用字符指针来处理也是一种常见的做法。求字符串长度,用for循环语句来出来需要两次查看字符串。


AC的C语言程序如下:

/* HDU2024 C        */

#include 
#include 

int main(void)
{
    int n;
    char s[50+1], *t;

    gets(s);
    n = atoi(s);
    while(n--) {
        gets(s);
        if(!isalpha(s[0]) && s[0] != '_') {
            //                
            printf("no
"); } else { int flag = 1; t = s + 1; while(*t && flag) { // 、 , if(isalpha(*t)) { t++; continue; } if(*t == '_') { t++; continue; } if(isdigit(*t)) { t++; continue; } // 、 flag = 0; break; } if(flag) printf("yes
"); else printf("no
"); } } return 0; }

좋은 웹페이지 즐겨찾기