解题思路: 没有说输入多少串字符串结束,结束条件是当输入End of file时结束程序
“End of file”这个字符串中间有空格,在while()中采用gets获取字符串
首先要判断退出条件即:strcmp(a, b) == 0
直接 return 0 退出就可。
特殊一点是负数的情况,正常区间是[0,255],由负号就退出循环
if (a[i] == '-') {
printf("N\n");
flag = 1;//这里的flag需要有,for循环主要判断 N 的特殊条件,输出Y的条件在for循环外
break;
}
有字母就退出,这里只有小写字母,只判断了小写字母
if (a[i] >= 'a' && a[i] <= 'z') {
printf("N\n");
flag = 1;//同样有flag 因为这里发现错误直接退出不管后面的情况
break;
}
对于 '.'的处理 ,3个点分割4个数值,每个数字独立计算是否符合范围,这就需要一位一位的添加
组合成一个数字t,用t判断是否满足范围。
if (a[i] == '.') {
if (t > 255) {
printf("N\n");
t = 0;// t重置为0是因为点分隔的每个数字相互独立
flag = 1;
break;
}
else
t = 0;// t重置为0是因为点分隔的每个数字相互独立
continue;
}
对数字的处理中,只要是数字就放入t,每放入一个先把上个t*10,各个位都往前进一位
if (a[i] >= '0' && a[i] <= '9') {
t *= 10;
c = a[i]-'0';//因为是字符串形式,获取当前i下标所对应的int形数字的值,把它加到t的个位
t += c;
}
对于正确解的处理即Y
由flag标记区分是正常for循环结束退出,还是直接break终止了for的循环。
flag=1,是由break退出for循环,即之前的判断条件 符号,字母,和前三段大于了255
flag=0时 仅需要判断最后一段是否满足题意,因为是正常退出
在flag=0的判断中同样需要重置t=0,为下一次while循环所接收的数字做准备
if (flag == 1) {
flag = 0;
continue;
}
else if (flag == 0) {
if (t > 255) {
printf("N\n");
t = 0;
}
else if (t <= 255) {
printf("Y\n");
t = 0;
}
注意事项:
参考代码:
#include<stdio.h>
#include<string.h>
int main() {
char a[100], b[100] = { "End of file" };
int t=0, flag = 0,c=0;
while (gets(a)) {
if (strcmp(a, b) == 0)
return 0;
for (int i = 0; i < strlen(a); i++) {
if (a[i] == '-') {
printf("N\n");
flag = 1;
break;
}
if (a[i] >= 'a' && a[i] <= 'z') {
printf("N\n");
flag = 1;
break;
}
if (a[i] == '.') {
if (t > 255) {
printf("N\n");
t = 0;
flag = 1;
break;
}
else
t = 0;
continue;
}
if (a[i] >= '0' && a[i] <= '9') {
t *= 10;
c = a[i]-'0';
t += c;
}
}
if (flag == 1) {
flag = 0;
continue;
}
else if (flag == 0) {
if (t > 255) {
printf("N\n");
t = 0;
}
else if (t <= 255) {
printf("Y\n");
t = 0;
}
}
}
getchar(); getchar();
return 0;
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复