简单的字符串切分,面向用例编程,判断的地方需要注意一点

#include<stdio.h>
// 拆分字符串
int split(char in[50], char **sub) {
    char *p = in;
    char key[2] = ".";
    int num = 0;
    //经典的切分
    p = strtok(in, key);
    while(p != NULL) {
        sub[num++] = p;
        p = strtok(NULL, key);
    }
    return num++;
}
// 判断每组数字是否合法
int isOK(char IP[10]) {
    int i = 0;
    //两个特殊用例
    if(IP[i] < '0' || IP[i] > '9')
    {
        return 0;
    }
    if(IP[i] == '0' && IP[i+1] != '\0')
    {
        return 0;
    }
    int a = atoi(IP);
    if(a < 0 || a > 255){
        return 0;
    }
    return 1;
}
int main() {
    char in[50] = {0};
    while(gets(in)) {
        char *sub[10];
        int num = split(in, sub);
        //判断是否是四段
        if(num != 4)
        {
            printf("NO\n");
        }
        else
        {
        	//用ret保存所有判断的与,只要有一个0就是0
            int ret = 1;
            for(int i = 0; i < num; i++) {
                ret &= isOK(sub[i]);
            }
            if(ret == 1) {
                printf("YES\n");
            } else {
                printf("NO\n");
            }
        }
    }
}