【申明:本文仅限于自我归纳总结和相互交流,有纰漏还望各位指出。 联系邮箱:Mr_chenping@163.com】
题目:
ip合法性检查
题目分析:
(1) 字符串只含有数字和‘.‘
(2) 长度在7-15之间(0.0.0.0--255.255.255.255)
(3) 每个数字在0-255之间
(4) ‘.‘号不能超过3个,且不能连续
算法实现:
#include <stdio.h> #include <string.h> #define MAX_LEN 15 //255.255.255.255 #define MIN_LEN 7 //0.0.0.0 int str_to_int(const char *begin, const char *end) { int total = 0; const char *s = begin; while(s < end) { total = 10*total + (*s - '0'); s++; } printf("total=%d\n", total); return total; } /* ** ip合法性检查 ** (1) 字符串只含有数字和'.' ** (2) 长度在7-15之间(0.0.0.0--255.255.255.255) ** (3) 每个数字在0-255之间 ** (4) '.'号不能超过3个,且不能连续 */ int check_ip(const char *str) { int len = strlen(str); if(!str || len > MAX_LEN || len < MIN_LEN) return 0; const char *slow = str, *fast = str; int count_dot = 0, tmp; while(*fast != '\0') { if(*fast != '.' && (*fast < '0' || *fast > '9')) return 0; while(*fast != '.') { if(*fast == '\0') break; fast++; } if(*fast == '.') { if(++count_dot > 3) //.数量大于3个 return 0; } if(*fast == '.' && *slow == '.') //两个.挨着 return 0; tmp = str_to_int(slow, fast); if(tmp < 0 || tmp > 255) return 0; slow = ++fast; } return 1; } int main() { char str[] = "01.16"; //char str[] = " 01.168.1.2"; //char str[] = "01.168..2"; //char str[] = "192.168.2.1000"; printf("-------->%d\n", check_ip(str)); }
原文地址:http://blog.csdn.net/mr_chenping/article/details/46440415