方法一(比较复杂):
#include<stdio.h>
#include<string.h>
int main()
{
char arr[20];
int i=0,count=0;
bool flag=1;
scanf("%s",&arr);
if(strlen(arr)>13 || (arr[3]!='.') || (arr[7]!='.') || (arr[9]!='.'))
{
printf("No");
return 0;
}
while(arr[i]!='.')
{
if(arr[i]<'0'||arr[i]>'9'||count>=3)
{
printf("No");
return 0;
}
count++;
i++;
}
i++;
count=0;
while(arr[i]!='.')
{
if(arr[i]<'0'||arr[i]>'9'||count>=3)
{
printf("No");
return 0;
}
count++;
i++;
}
i++;
if(arr[i]<'0'||arr[i]>'9')
{
printf("No");
return 0;
}
i=i+2;
count=0;
while(arr[i]!='\0')
{
if(arr[i]<'0'||arr[i]>'9'||count>=3)
{
flag=0;
printf("No");
return 0;
}
count++;
i++;
}
if(flag)
printf("\nYes!");
}
方法二(比较简单):
#include<stdio.h>
#include<string.h>
int judge(char *arr,int length);
int main()
{
char arr[20];
int length;
scanf("%s",arr);
length=sizeof(arr)/sizeof(arr[0]);
if(judge(arr,length))
printf("Yes!");
else
printf("No!");
}
int judge(char *arr,int length)
{
int a,b,c,d;
if(arr == NULL || length < 11 || length < 13)
return 0;
if((arr[3]!='.')||(arr[7]!='.')||(arr[9]!='.'))
{
return 0;
}
sscanf(arr,"%d.%d.%d.%d",&a,&b,&c,&d);
if(a<0 || a>255)
return 0;
if(b<0 || b>255)
return 0;
if(c<0 || c>1)
return 0;
if(d<0 || d>255)
return 0;
return 1;
}