C语言编程题

2025-02-02 03:40:53
推荐回答(5个)
回答1:

#include
#include
#include
#include
usingnamespace std;

int judge(char IP[])
{
int i,j;
int len;
int point[3];
int ip[4];
memset(point,0,sizeof(point));
memset(ip,0,sizeof(ip));
len=strlen(IP);
if(len<7||len>15) //合法的IP字符串长度必定在[7,15]范围内
{
return0;
}
else
{
for(i=0;i {
if(!(IP[i]>='0'&&IP[i]<='9'||IP[i]=='.'))
{
return0;
}
}
j=0;
for(i=0;i {
if(IP[i]=='.')
j++;
}
if(j!=3)
{
return0;
}
j=0;
for(i=0;i {
if(IP[i]=='.')
point[j++]=i;
}

//第一个'.'不能在IP的初始位置,第三个'.'不能在末尾,相邻两个'.'位置之差必须大于1
if(!(point[0]>0&&point[2]1&&(point[2]-point[1])>1))
{
return0;
}
if(point[0]>1) //判断是否存在前导0
{
if(IP[0]=='0')
return0;
}
if((point[1]-point[0])>2)
{
if(IP[point[0]+1]=='0')
return0;
}
if((point[2]-point[1])>2)
{
if(IP[point[1]+1]=='0')
return0;
}
if((len-point[2])>2)
{
if(IP[point[2]+1]=='0')
return0;
}
j=0;
for(i=0;i {
if(IP[i]!='.')
ip[j]=ip[j]*10+IP[i]-48;
else
j++;
}
for(i=0;i<4;i++) //判断数字是否在[0,255]范围内
{
if(!(ip[i]>=0&&ip[i]<=255))
{
return0;
}
}
return1;
}
}

int main(void)
{
char IP[35];
while(scanf("%s",IP)==1)
{
if(judge(IP))
printf("YES\n");
else
printf("NO\n");
}
return0;
}

回答2:

#include
int main(){
int a,b,c,d;
while(scanf("%d.%d.%d.%d",&a,&b,&c,&d)!=EOF){
if(a>0&&a<255&&b>=0&&b<255&&c>=0&&c<255&&d>=0&&d<255)
printf("YES\n");
else

printf("INPUT ERROR\n");

}
return 0;
}
PS:楼上C++大神不简单,简单版的在此,更多判断请自己加。

回答3:

用正则表达式
^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$

回答4:

什么ip叫合法?
你可以当字符串处理,每个字符进行判断

回答5:

判断输入的字符串是否是合法IP,你输入的是IP地址吗