题解 | #合法IP#
合法IP
https://www.nowcoder.com/practice/995b8a548827494699dc38c3e2a54ee9
#include <stdio.h> #include <string.h> int split(char str[50],char **sub) { int num=0; char key[2]="."; char *q=str; q=strtok(str,key); while(q) { sub[num++]=q; q=strtok(NULL,key); } //printf("num=%d\n",num); return num; //num 我在sub[]中已经自增了一次,就不要再自增了,以及最后的num输出究竟是++num还是num++还是num,这个容易出错 } int is_OK(char IP[10]) { int i=0; int len=strlen(IP); //printf("%s\n",IP); //printf("IP[0]=%c\n",IP[0]); for(i=0;i<len;i++) { if(IP[i]>'9'||IP[i]<'0') { //printf("flag1\n"); return 0; } } i=0; if(IP[i]=='0'&&IP[i+1]!='\0') //一个是忘记了==,一个是忘记了给0上'' { //printf("flag2\n"); return 0; } int a =atoi(IP); if(a<0||a>255) { //printf("flag3\n"); return 0; } return 1; } int main() { char str[50]={0}; char *sub[10]={0}; while (scanf("%s",str) != EOF) { if(split(str, sub)!=4) { //printf("aaaa\n"); printf("NO\n"); continue; } else { int i=0; int ret=1; for(i=0;i<4;i++) { //printf("is_OK=%d\n",is_OK(sub[i])); ret &= is_OK(sub[i]); } if(ret==1) { printf("YES\n"); continue; } else { printf("NO\n"); continue; } } } return 0; }