解题思路:
①多行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 人评分