Bailian3659 判断是否为C语言的合法标识符【文本处理】



总时间限制: 
1000ms  
内存限制: 
65536kB
描述
C语言中的合法标识符的定义为:以下划线或字母开头的字母数字串(含下划线)。
完成一个程序实现对输入的n个字符串进行判定,是否为C语言的合法标识符。如果是则输出1,不是则输出0
输入
输入的第一行为一个数字,表明有几个输入字串。
后面每一行为一个长度不超过80的字符串。
输出
对所有输入的字符串进行判断,是合法标识符则输出1,回车。否则输出0,回车。
样例输入
5
hello_world
my god
i
_stdio
008A
样例输出
1
0
1
1
0

问题链接Bailian3659 判断是否为C语言的合法标识符

问题分析:(略)

程序说明:按照规则逐个字符判断处理。

15行getchar();是为了处理输入的行数后面的空格,如果不写的话会造成输出缺少一项个头插入,且开头会先输出一个零

后面少输出一组数据,及将(行数后的空格)进行了第一组数据进行判断,而缺少了一行,加了getchar(),以后会取走空格,从而正常执行,也可以改为scanf("%d "),里面的那个空格也可以AC,就避免了将行数后面的空格读入了

题记:写程序最需要的是逻辑清晰。

 

AC的C语言程序如下

  1. /* Bailian3659 判断是否为C语言的合法标识符 */  
  2.   
  3. #include <stdio.h>  
  4. #include <ctype.h>  
  5.   
  6. #define N 80  
  7. char s[N + 1];  
  8.   
  9. int main(void)  
  10. {  
  11.     int n, ans;  
  12.     char *t;  
  13.   
  14.     scanf("%d", &n);  
  15.     getchar();  
  16.     while(n--) {  
  17.         gets(s);  
  18.   
  19.         if(!isalpha(s[0]) && s[0] != '_') {  
  20.             // 非字母或下划线开头则不是标识符  
  21.             ans = 0;  
  22.         } else {  
  23.             ans = 1;  
  24.             t = s + 1;  
  25.             while(*t && ans) {  
  26.                 // 字母、下划线或数字,则检查下一个字符  
  27.                 if(isalpha(*t)) {  
  28.                     t++;  
  29.                     continue;  
  30.                 }  
  31.                 if(*t == '_') {  
  32.                     t++;  
  33.                     continue;  
  34.                 }  
  35.                 if(isdigit(*t)) {  
  36.                     t++;  
  37.                     continue;  
  38.                 }  
  39.                 // 非字母、下划线或数字则不是标识符  
  40.                 ans = 0;  
  41.                 break;  
  42.             }  
  43.         }  
  44.   
  45.         printf("%d\n", ans);  
  46.     }  
  47.   
  48.     return 0;  
  49. }  
/* Bailian3659 判断是否为C语言的合法标识符 */

#include <stdio.h>
#include <ctype.h>

#define N 80
char s[N + 1];

int main(void)
{
    int n, ans;
    char *t;

    scanf("%d", &n);
    getchar();
    while(n--) {
        gets(s);

        if(!isalpha(s[0]) && s[0] != '_') {
            // 非字母或下划线开头则不是标识符
            ans = 0;
        } else {
            ans = 1;
            t = s + 1;
            while(*t && ans) {
                // 字母、下划线或数字,则检查下一个字符
                if(isalpha(*t)) {
                    t++;
                    continue;
                }
                if(*t == '_') {
                    t++;
                    continue;
                }
                if(isdigit(*t)) {
                    t++;
                    continue;
                }
                // 非字母、下划线或数字则不是标识符
                ans = 0;
                break;
            }
        }

        printf("%d\n", ans);
    }

    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值