简单的字符串切分,面向用例编程,判断的地方需要注意一点
#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");
}
}
}
}