解题思路:
①多行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分
2 人评分
C语言训练-字符串正反连接 (C语言代码)浏览:622 |
C语言程序设计教程(第三版)课后习题9.6 (C语言代码)浏览:277 |
C语言程序设计教程(第三版)课后习题5.5 (C语言代码)浏览:664 |
【矩阵】 (C++代码)浏览:946 |
1014题解浏览:485 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:551 |
C语言程序设计教程(第三版)课后习题10.3 (C语言代码)浏览:1916 |
C语言程序设计教程(第三版)课后习题10.1 (C语言代码)浏览:530 |
字符串的输入输出处理 (C语言代码)浏览:989 |
C语言程序设计教程(第三版)课后习题12.3 (C语言代码)浏览:543 |