原题链接:IP判断
解题思路:
①多行IP分别存入多个字符串数组中,并记录IP数量k.
②处理每行IP,用strtok(在string.h库里)函数以"."为分隔符对IP字符串进行切分。同时置标志变量flag为1,便于后续判断。
③对切分的字符串用atoi函数(在stdlib.h里)将切分的一部分字符串转换为十进制数字,再比较范围。若不在题目规定范围,则置flag为0.
④对于flag所代表的真假,通过循环输出Y/N。
注意事项:
①atoi函数将字符转为十进制数字,之后直接比较范围的说明:
若字符串有字母,则转换失败,返回0值,同时题目又不允许前导0的存在,即A,B,C,D的四个整数都不可能为0,从而得以通过atoi返回值是否在(0,255]判断。
②对于每个IP,首次调用strtok时,传入str为待分解的字符串地址,同一字符串之后的再次调用分解要将传入的str设置为NULL。
参考代码:
#include <stdio.h> #include <string.h> #include <stdlib.h> #define N 30 int main(void) { int i,k=0,flag,b; char str[10][N]; while(gets(str[k])!=NULL) k++; //输入处理 char *token; for(i=0; i<k; i++) { //通过循环对每一行IP进行判断 flag=1; //对每一行IP,预先置为1(真) token=strtok(str[i],"."); while(token!=NULL) { b=atoi(token); //b接受转换后函数的返回值,若待转换字串含字母(即转换失败)返回0。 if(b<=0||b>255) flag=0; token=strtok(NULL,"."); } if(flag) printf("Y\n"); //输出处理 else printf("N\n"); } return 0; }
算是有点取巧吧,刚把string库的函数及作用抄了一遍,没想到这么快就用上了,嘿嘿嘿。
emm,第一次写题解,若有错误,恳请大佬指正!
0.0分
3 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复