案例分析题

试题二
阅读下列说明和C函数,填补函数中的空缺,将解答填入答案纸的对应栏目内。

【说明】
函数isLegal(char*ipaddr)的功能是判断以点分十进制数表示的IPV4地址是否合法。参数ipadddr 给出表示IPV4地址的字符串的首地址,串中仅含数字字符和“.”。若IPV4地址合法则返回1,否则返回0。判定为合法的条件是:每个十进制数的值位于整数区间[0,255],两个相邻的树之间用“.”分隔,共4个数、3个“.”。例如,192.168.0.15、1.0.0.1是合法的,192.168.1.256、1.1..1是不合法的。
【函数】
int isLegal (char* ipaddr)
{
      int flag;
      int curVal; //curVal 表示分析出的一个十进制数
      int decNum = 0, dotNum = 0;//decNum 用于记录十进制数的个数
                                                      //dotNum 用户记录点的个数
      char* p = (1);
      for(; *p; p++) {
            curVal = 0; flag = 0;
            while (isdigit (*p)) { //判断是否为数字字符
                  curVal = (2) + *p - ’0’;
                  (3)
                  flag = 1;
            }
            if (curVal > 255) {
                  return 0;
            }
            if (flag) { 
                  (4)
            }
            if (*p = ’.’) {
                  dotNum++;
            }
      }
      if ((5)) {
            return 1;
      }
      return 0;
}

【正确答案】

(1)ipaddr 
(2)curval*10 
(3)p++ 
(4)decNum++ 
(5)decNum==4 && dotNum==3

【答案解析】

此题判断IPV4地址是否合法,主要是判断其每个十进制数的大小和总个数以及“.”个数来进行判别。
首先用isdigital函数判断是否为十进制数,是则保留值。指针移到地址的下一个字符。
每找到一个十进制数都需要和前一次找到的值进行组合,即前一次的结果要乘以10。
每找完一个完整数字和“.”都需要记录,所以要有decNum++和dotNum++。
最后,如果IP地址正确,则返回1。即:decNum=4和dotNum=3时成立。