例如
输入:192.41.6.20
输出:0xC0290614
输入:257.32.23.1
输出:Error
输入描述:
按题意输入。 注意:输入可能是任意的一个字符串,比如“abc.bas.fefe.4r4”或者“23.23.11.23.123” 这都是不合法的IP地址
#include <stdio.h>
#include <string.h>
int main(){
char s[100]={'\0'};
gets(s);
int n=strlen(s);
if(n>15)
{ printf("Error");
return -1;
}
int pot[5]={-1,-1,-1,-1}; //记录每个.的位置包括首尾
pot[4]=n;
int sumpot=0;
for(int i=0;i<n;i++)
{
if(s[i]<'0'||s[i]>'9') //检查非数字和.
{ if(s[i]!='.')
{ printf("Error");
return -1;
}
}
if(s[i]=='.') //检查.是否超过3个
{
sumpot++;
if(sumpot>3)
{ printf("Error");
return -1;
}
pot[sumpot]=i;
}
}
int num[3]={0}; //记录每两.之间的每个数字
int snum[4]={0}; //记录每两.之间的数
int sumnum=0;
for(int i=0;i<4;i++) //检查是否超过255
{
int times=pot[i+1]-pot[i]-1;
for(int j=0;j<times;j++)
{
sumnum++;
if(sumnum>3)
{ printf("Error");
return -1;
}
num[sumnum-1]=(int)s[j+pot[i]+1]-48;
}
switch(sumnum)
{ case 1:snum[i]=num[0];break;
case 2:snum[i]=10*num[0]+num[1];break;
case 3:snum[i]=100*num[0]+10*num[1]+num[2];break;
}
if(snum[i]>255||snum[i]<0)
{ printf("Error");
return -1;
}
sumnum=0; //将sumnum和num[]清零
for(int i=0;i<3;i++)
num[i]=0;
}
printf("0x%02X%02X%02X%02X",snum[0],snum[1],snum[2],snum[3]);
}
运行结果:
正确输入
若错误输入: