HDU2024 C语言合法标识符【文本处理】
C语言合法标识符
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 142616 Accepted Submission(s): 53684
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语言合法标识符
问题简述:(略)
问题分析:
按Markdown格式重写了题解,旧版题解参见参考链接。
C语言的标识符是字母或下划线(’’)开头的,字母、下划线(’’)和数字的字符串。
这个题的正解是用函数fgets()来实现,虽然用gets()函数来实现对付考试被比赛没有问题,工程中还是需要正解。
解法一:用函数gets()实现
如果用函数scanf()读入字符串,空行(直接输入回车)是个小陷阱,字符串中含有空格也是陷阱,是不可行的。可以用函数gets()实现,AC没有问题。
解法二:用函数fgets()实现
函数gets()存在风险,是新的C语言标准不推荐使用的,虽然用用也可以。正确的做法是使用函数fgets()来实现。
如果已经有了用函数gets()的解题程序,只需要把所有的函数gets()调用换成函数fgets()调用并且代入合适的参数。还需要注意读入行结束符是’\n’,而不是字符串结束符’\0’。
需要注意,函数gets()的第二个参数传递的是数组长度,需要考虑最后的空格或换行符号,所以N需要是定义为50+1。
程序说明:
C语言程序中要尽可能使用库函数。
参考链接:HDU2024 C语言合法标识符【入门】
题记:(略)
WA的C语言程序(解法二:用函数fgets()实现,正解)如下:
/* HDU2024 C语言合法标识符 */#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>#define N 50 + 1
char s[N ];int main(void)
{int n, ans = 0, i;fgets(s, N, stdin);n = atoi(s);while (n--) {fgets(s, N, stdin);if (!isalpha(s[0]) && s[0] != '_')ans = 0; /* 非字母或下划线开头则不是标识符 */else {ans = 1;for (i = 1; s[i] != '\n' && ans; i++) {/* 字母、下划线或数字,则检查下一个字符 */if (isalpha(s[i]) || s[i] == '_' || isdigit(s[i]));elseans = 0; /* 非字母、下划线或数字则不是标识符 */}}puts(ans ? "yes" : "no");}return 0;
}
AC的C语言程序(解法一:用函数gets()实现)如下:
/* HDU2024 C语言合法标识符 */#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>#define N 50
char s[N + 1];int main(void)
{int n, ans = 0, i;gets(s);n = atoi(s);while (n--) {gets(s);if(!isalpha(s[0]) && s[0] != '_')ans = 0; /* 非字母或下划线开头则不是标识符 */else {ans = 1;for (i = 1; s[i] && ans; i++) {/* 字母、下划线或数字,则检查下一个字符 */if (isalpha(s[i]) || s[i] == '_' || isdigit(s[i]));elseans = 0; /* 非字母、下划线或数字则不是标识符 */}}puts(ans ? "yes" : "no");}return 0;
}
HDU2024 C语言合法标识符【文本处理】相关推荐
- HDU2024 C语言合法标识符【入门】
C语言合法标识符 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- HDU2024 C语言合法标识符
C语言合法标识符 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- c语言合法标识符号大全,C语言合法标识符
C语言合法标识符 输入一个字符串,判断其是否是C的合法标识符. Input 输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串 ...
- HDOJ2024C语言合法标识符
C语言合法标识符 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- 在c语言中合法标识符的第一个字符必须是,c语言合法标识符判断规则是什么?...
规则是:1.标识符的第一个字符必须是字母(a~z或A~Z)或下划线(_):2.后面跟的字符是由任意字母.下划线(_).数字组成:3.标识符中的大小写字母是有区别的,代表不同含义:4.标识符不能是关键字 ...
- c语言合法自定义标识符_c语言合法标识符的要求是什么
c语言合法标识符的要求是:标识符只能由字母(A~Z, a~z).数字(0~9)和下划线(_)组成,并且第一个字符必须是字母或下划线,不能是数字. 标识符 定义变量时,我们使用了诸如 a.abc.mn1 ...
- c语言判断字符串合法标识符,HDU 2024 C语言合法标识符(以及一些关于输入和ctype.h的内容)...
C语言合法标识符 输入一个字符串,判断其是否是C的合法标识符. Input 输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串 ...
- c语言oj合法标识符,YTUOJ-C语言合法标识符
Description 输入一个字符串,判断其是否是C的合法标识符. Input 输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的 ...
- C语言合法标识符(含知识点)
C语言标识符只能是字母(A-Z,a-z).数字(0-9).下划线()组成的字符串,并且其第一个字符必须是字母或下划线. 题目描述 输入一个字符串,判断其是否是C的合法标识符. 输入 输入一个长度不超过 ...
最新文章
- 词法作用域和动态作用域
- Windows 11 再惹“众怒”!网友:微软就是逼我去买新电脑!
- 苹果的浏览器safari无法识别 2016-1-1这样的日期,会返回Invalid Date
- Docker学习笔记之保存和共享镜像
- javascript如何释放内存
- Fisher线性判别算法原理及实现 MATLAB
- php mysql 正则_MySQL 正则表达式
- 耿建超英语语法---连词
- 可复用可扩展的红包后台系统设计方案
- LeetCode知识点总结 - 1179
- Solidity IDE Remix中文版使用手册
- java实现Calendar求两个日期差
- 苹果 Apple Beta 版软件计划 相关软件地址
- python之pip常用命令
- 关于React 行内样式backgroundImage的设置
- 你见过最听话的狗狗有多听话?
- UNetbootin for Linux制作u盘安装盘
- Unity鼠标拖动物体、按下鼠标左键旋转观察物体、鼠标滚轮缩放视野
- wiring的运行(使用open source产品组装你的web应用架构)
- 曲线拟合问题与L2正则
热门文章
- 停止做这7件事,你的工作效率至少翻一倍!
- Go1.18泛型使用详解(附最新gocode)
- 关于AIR 应用程序沙箱
- eclipse 达梦 连接_JDBC连接达梦7数据库
- 【java学习之路】(java SE篇)(练习)集合练习:经典例题
- 使用Navicat Premium 同步 测试数据库 与 正式数据库 数据
- 计算机网络课程设计即时通讯,计算机网络课程设计报告-基于LAN的即时通信软件.doc...
- oracle euk 什么系统,【T】每日一生信--interproscan安装及使用(终结版)
- .net @什么意思_.NET和F#周报2019-4 各地微软技术俱乐部汇总 ML.NET 0.10
- C#与C++在语言层面的区别(不断补充)