题目内容:
编写程序,将十进制点分的IP转换为32位二进制IP地址。程序要能验证输入的十进制点分IP地址的合法性。用户输入的IP不和法时,输出”data error”。
请使用模块化程序设计的思想,将功能模块编写成函数。通过指针传递参数,操作数据,返回结果。在主函数中输入IP地址,调用函数进行合法性验证和转换,在主函数中输出32位二进制IP。
输入格式:
十进制点分IP地址(英文句点)
输出格式:
32位二进制数(二进制字符串)
输入样例:
202.151.96.33
输出样例:
11001010100101110110000000100001
提示:十进制转换为二进制。对整数部分,除2取余,直到商为0。例如
13/2=6…..1(低位)
6/2=3……0
3/2=1……1
1/2=0……1
转换后的二进制数位1101
时间限制:2000ms内存限制:32000kb
#include<iostream>
using namespace std;
int main()
{
char ch[33];
char s[100],*p;
int a[4],n,l=0,i;
cin.getline(s,99);
p=s;
for(i=0;i<4;i++)
{
if((*p>'9' || *p<'0') && *p!='.')
break;
n=0;
while((*p)!='.'&&*p!=0)
{
n=n*10+*p-48;
p++;
}
a[i]=n;
if(*p=='.'&&*(p+1)=='.')
break;
if(i==3 && *p!=0)
i++;
p++;
}
if(i==4)
{
for(int k=0;k<4;k++)
{
int t=k*8;
for(int j=7;j>=0;j--)
{
ch[t+j]=a[k]%2+48;
a[k]=a[k]/2;
}
if(a[k]!=0)
{
cout<<"data error"<<endl;
l=1;
break;
}
}
if(l==0)
{
ch[32]='\0';
cout<<ch<<endl;
}
}
else
cout<<"data error"<<endl;
return 0;
}