解题思路:
先以'.'号为间隔符进行分段。再一次对每段判断是否为数字,如果是数字则进行转换,否则打印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 人评分
(格式错误) qq290048663 碰巧告知我吧浏览:678 |
C二级辅导-求偶数和 (C语言代码)浏览:659 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:1153 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:1914 |
人见人爱A+B (C语言代码)浏览:664 |
WU-printf基础练习2 (C++代码)浏览:2061 |
WU-C语言程序设计教程(第三版)课后习题11.12 (C++代码)(想学链表的小伙伴可以看看)浏览:964 |
【计算两点间的距离】 (C语言代码)浏览:1522 |
C语言训练-亲密数 (C语言代码)浏览:697 |
C语言程序设计教程(第三版)课后习题9.8 (C语言代码)浏览:702 |