tyro201


私信TA

用户名:someone201

访问量:1023

签 名:

得意犹堪夸世俗

等  级
排  名 13950
经  验 903
参赛次数 0
文章发表 2
年  龄 18
在职情况 学生
学  校 南京中医药大学
专  业 医学信息工程

  自我简介:

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

  评论区

  • «
  • »