原题链接:IP判断
解题思路:
先以'.'号为间隔符进行分段。再一次对每段判断是否为数字,如果是数字则进行转换,否则打印N;最后进行数字的大小判断,观察其是否在[0, 255]的范围内。
注意事项:
注意判断时所读取的数组长度。
参考代码:
//1116: IP地址判断 #include <stdio.h> #include <string.h> char a[4], b[4], c[4], d[4], ip[30]; int i=0; // aflag标志数,1为数,0为非数; // alen分段数; // anum转换后的数字; int aflag, bflag, cflag, dflag; int alen, blen, clen, dlen; int anum, bnum, cnum, dnum; int main() { while(scanf("%s", ip) != EOF) { // 对标志符、分段数、转换后的数字进行初始化 aflag=1, bflag=1, cflag=1, dflag=1; anum=0, bnum=0, cnum=0, dnum=0; alen=0, blen=0, clen=0, dlen=0; i = 0; if(strlen(ip) > 16) { printf("N\n"); continue; } // 将原字符串分为四段 while(ip[i] != '.') { a[alen] = ip[i]; alen++; i++; } // 第一段结束 i++; while(ip[i] != '.') { b[blen] = ip[i]; blen++; i++; } // 第二段结束 i++; while(ip[i] != '.') { c[clen] = ip[i]; clen++; i++; } // 第三段结束 i++; while(i < strlen(ip)) { d[dlen] = ip[i]; dlen++; i++; } // 第四段结束 // 判断每个字符是否是数字,是则转换为int类型,否则将标志数置0; // 注意:从数组中取出的数字为ascii码,需要减去 49; // 在第一次使用a[]之后,如果a[]中所有的元素已经被使用过一次,而之后的较短的IP地址进入后,有一部分没有完全覆盖,会出错。 // 这时进行数字转换判断时,应该以分段时的长度为准,而不是已数组a[]的长度。 for(i=0; i<alen; i++) { if( a[i] <'0' || a[i] >'9' ) { aflag = 0; break; } else { anum = anum*10 + (a[i]-48); } } for(i=0; i<blen; i++) { if( b[i] <'0' || b[i] >'9' ) { bflag = 0; break; } else { bnum = bnum*10 + (b[i]-48); } } for(i=0; i<clen; i++) { if( c[i] <'0' || c[i] >'9' ) { cflag = 0; break; } else { cnum = cnum*10 + (c[i]-48); } } for(i=0; i<dlen; i++) { if( d[i] <'0' || d[i] >'9' ) { dflag = 0; break; } else { dnum = dnum*10 + (d[i]-48); } } if( aflag == 0 || bflag == 0 || cflag == 0 || dflag == 0) { printf("N\n"); continue; } // 判断是否在[0, 255]的范围内 if( anum < 0 || anum > 255 ) { printf("N\n"); continue; } else if( bnum < 0 || bnum > 255 ) { printf("N\n"); continue; } else if( cnum < 0 || cnum > 255 ) { printf("N\n"); continue; } else if( dnum < 0 || dnum > 255 ) { printf("N\n"); continue; } else { printf("Y\n"); } } }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复