解题思路: 没有说输入多少串字符串结束,结束条件是当输入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语言程序设计教程(第三版)课后习题9.3 (Java代码)浏览:957 |
A+B for Input-Output Practice (C++代码)浏览:608 |
字符串问题 (C语言代码)浏览:1508 |
校门外的树 (C语言代码)浏览:957 |
C语言程序设计教程(第三版)课后习题11.8 (C语言代码)浏览:876 |
C语言程序设计教程(第三版)课后习题10.3 (C语言代码)浏览:526 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:460 |
C语言程序设计教程(第三版)课后习题9.8 (C语言代码)浏览:665 |
模拟计算器 (C++代码)浏览:804 |
Tom数 (C语言代码)浏览:725 |