题目编号:Exp05-Enhanc02,freshman-1031
题目名称:合法标识符
题目描述:
已知C语言中合法标识的定义是,以_或字母开始,并由_、数字、字母构成的连续字符串。编写程序判断给定的字符串是否是合法C语言标识符。
输入:输入第一行给出正整数 N(≤10^2)是输入的字符串个数。随后 N 行,每行给出1个任意长度的字符串(可能含有空白字符,长度不超过256)。
输出:
输出第一行以Valid:X 格式给出合法标识符个数 X,第二行以Invalid:Y 格式给出非法标识符个数 Y,无多余字符,冒号为西文冒号。
样例:
输入: 2 1242345567788990 abcdedffesfsgfef
输出: Valid:1 Invalid:1
题目编号 :Exp05-Basic04,GJBook3-07-11
题目名称:字符串部分删除
题目描述:
编写程序实现:使用自编函数char * str_delete(char *s, int v, int w)从字符串s的第v个字符开始删除w个字符,并将处理后的字符串首地址以函数返回值带回调用点。
输入:
第一行输入两个整数分别对应 v和w(0≤v, w<MIN(256,strlen(s))),测试数据已保证v和w符合要求;
第二行输入一个长度不超过256的字符串,字符串可能含有空格。
输出:
处理后的字符串。
样例:
输入: 2 6 ABCDEFGH 12345
输出: AH 12345
在1题中,对于分行字符串的输入一开始采取 gets(a[i])的方式,出错,误认为是gets一并读取分行数据,所以改用scanf("%s",a[i]);
在2题中,误认为是scanf 未将数字从缓存区里移除
总结
scanf | gets | |
开始 | 非空格与回车 | 所有 |
结束 | 空格或回车 | 回车 |
scanf 不识别空回车与空空格(过滤空格)从非空格非回车 读取至空格或非空回车停止 且不将后续空格或回车移除 结尾自动添加\0
gets 能识别空回车 (上述问题在于数字后均有换行) gets读取\n并移除\n并在字符串中用\0代替\n