解题思路:
注意事项:不会写的可以复制粘贴
参考代码:
#include<stdio.h>
#include<string.h>
int shuzidepanduan(char a[],int i,int d[])
{
int j,x=0;//j无敌的辅助 ,x为‘.’的下标
for(j=0;j<i;j++)
{
if(a[j]<'2')//判断字符小于2时候的情况
{
if(a[j]=='0')
{
j++;
if((j!=d[x])||(j!=i))
{
if(a[j]>='0'&&a[j]<='9')
return 0;
}
else
{
if(x<3)
{
j=d[x];
x++;
}
else
j=i;
}
}
}
else if(a[j]>='2')//判断A.B.C.D 这四个整数是否符合[0,255]
{
j++;/*若第一个字符大于等于2,则判断第二个字符*/
if((j!=d[x]||j!=i)&&(a[j]>='5'))
{
j++;//若第二个字符大于等于5,则判断第三个字符
if((j!=d[x]||j!=i)&&a[j]>'5')
return 0;//若第三个字符大于5,说明不符合[0,255],直接结束为 N
else if(j==d[x]||j==i)//若第三个字符为‘.’,说明这个整数只有两个字符,必定满足条件,直接跳到下一个整数的开始
{
if(x<3)
x++;
continue;
}
else//若第三个字符小于等于5,说明这个整数满足条件,判断下一个整数
{
if(x<3)
{
j=d[x];
x++;
}
else
j=i;
}
}
else if(j==d[x]||j==i)//若第二个字符为‘.’,说明这个整数只有两个字符,必定满足条件,直接跳到下一个整数的开始
{
if(x<3)
x++;
continue;
}
else //若第二个字符小于5,永远不会超过255,说明这个整数满足条件,所以不需要判断第三个字符,直接跳到下一个整数
{
if(x<3)
{
j=d[x];
x++;
}
else
j=i;
}
}
else if(j==i)//若把每一个字符都判断过了,没有错误,j==i,直接满足所有条件,完美结束;
return 1;
}
}
int shuzipanduan(char a[],int i)//因为最大是255(3个字符),所有的超过三个字符的就不符合条件
{
int d[3],c=0,e[4];//d为每个‘.’所在的位置。 c为每个‘.’的下标,e为A.B.C.D四个整数的字符数量
for(b=0;b<i;b++)
{
if(a[b]=='.')
{
d[c]=b;
c++;
}
}
e[0]=d[0];
e[1]=d[1]-d[0];
e[2]=d[2]-d[1];
e[3]=(i)-d[2];
if(e[0]>3)
return 0;
else if(e[1]>4)
return 0;
else if(e[2]>4)
return 0;
else if(e[3]>4)
return 0;
else
return shuzidepanduan(a,i,d);//把符合要求的ip进行再一次的筛选
}
int main()
{
char n[31],Tui[]="End of file";
int i;
congtou:
while(scanf("%s",n)!=EOF)
{
if(strcmp(Tui,n)==0)//输入End of file退出
goto cuowu;
for(i=0;i<strlen(n);i++)
{
if(n[i]=='.'||(n[i]>='0'&&n[i]<='9'))
continue;
else//判断是否为其他字符
{
printf("N\n");
goto congtou;
}
}
shuzipanduan(n,i)?printf("Y\n"):printf("N\n");
goto congtou;
}
cuowu:
return 0;
}
0.0分
0 人评分
点我有惊喜!你懂得!浏览:1705 |
C语言训练-委派任务* (C语言代码)..................竟然是第一个浏览:2212 |
printf基础练习2 (C语言代码)浏览:648 |
Hello, world! (C语言代码)浏览:1315 |
回文串 (C语言代码)浏览:3095 |
字符串比较 (C语言代码)答案错误????浏览:641 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:1015 |
WU-小九九 (C++代码)浏览:1713 |
1642题解浏览:784 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:645 |