C++Ip地址十进制转二进制
题目为:编写程序,将十进制点分的IP转换为32位二进制IP地址。程序要能验证输入的十进制点分IP地址的合法性。用户输入的IP不和法时,输出"dataerror"。请使用模...
题目为:
编写程序,将十进制点分的IP转换为32位二进制IP地址。程序要能验证输入的十进制点分IP地址的合法性。用户输入的IP不和法时,输出"data error"。
请使用模块化程序设计的思想,将功能模块编写成函数。通过指针传递参数,操作数据,返回结果。在主函数中输入IP地址,调用函数进行合法性验证和转换,在主函数中输出32位二进制IP
我的程序哪里错了呢?
#include<iostream>
#include<cstring>
using namespace std;
bool check(int *num)
{
if(*num>255||*num<0)
return true;
return false;
}
int trans(int *num)
{
int a[8];
for(int i=7;i>=0;i--)
{
a[i]=*num%2;
*num=*num/2;
}
cout<<a;
}
int main()
{
char str[20];
int *p;
while(cin>>str)
{
int len=strlen(str),num=0;
for(int i=0;i<=len;i++)
{
if(str[i]!='.'&&i!=len)
{
num=num*10+str[i]-'0';
}
else
{
*p=num;
if(check(p))
{
trans(p);
}
}
}
}
return 0;
} 展开
编写程序,将十进制点分的IP转换为32位二进制IP地址。程序要能验证输入的十进制点分IP地址的合法性。用户输入的IP不和法时,输出"data error"。
请使用模块化程序设计的思想,将功能模块编写成函数。通过指针传递参数,操作数据,返回结果。在主函数中输入IP地址,调用函数进行合法性验证和转换,在主函数中输出32位二进制IP
我的程序哪里错了呢?
#include<iostream>
#include<cstring>
using namespace std;
bool check(int *num)
{
if(*num>255||*num<0)
return true;
return false;
}
int trans(int *num)
{
int a[8];
for(int i=7;i>=0;i--)
{
a[i]=*num%2;
*num=*num/2;
}
cout<<a;
}
int main()
{
char str[20];
int *p;
while(cin>>str)
{
int len=strlen(str),num=0;
for(int i=0;i<=len;i++)
{
if(str[i]!='.'&&i!=len)
{
num=num*10+str[i]-'0';
}
else
{
*p=num;
if(check(p))
{
trans(p);
}
}
}
}
return 0;
} 展开
1个回答
展开全部
#include<iostream>
#include<cstring>
using namespace std;
bool check(int *num)
{
if(*num>255||*num<0)
return true;
return false;
}
int trans(int *num)
{
char a[8];
int t = *num,i;
memset(a,0,sizeof(a));
for( i=0;t;i++)
{
a[i]=t%2+'0';
t=t/2;
}
for(i=7;i>=0;i--)
if(!a[i])
cout<<"0";
else
cout<<a[i];
cout<<".";
return 0;
}
int main()
{
char str[20];
int *p = new int;
while(cin>>str)
{
int len=strlen(str),num=0;
for(int i=0;i<=len;i++)
{
if(str[i]!='.' &&i!=len)
{
num=num*10+str[i]-'0';
}
else
{
*p=num;
num=0;
if(!check(p))
{
trans(p);
}
}
}
cout<<endl;
}
return 0;
}
#include<cstring>
using namespace std;
bool check(int *num)
{
if(*num>255||*num<0)
return true;
return false;
}
int trans(int *num)
{
char a[8];
int t = *num,i;
memset(a,0,sizeof(a));
for( i=0;t;i++)
{
a[i]=t%2+'0';
t=t/2;
}
for(i=7;i>=0;i--)
if(!a[i])
cout<<"0";
else
cout<<a[i];
cout<<".";
return 0;
}
int main()
{
char str[20];
int *p = new int;
while(cin>>str)
{
int len=strlen(str),num=0;
for(int i=0;i<=len;i++)
{
if(str[i]!='.' &&i!=len)
{
num=num*10+str[i]-'0';
}
else
{
*p=num;
num=0;
if(!check(p))
{
trans(p);
}
}
}
cout<<endl;
}
return 0;
}
追问
非常感谢!
我的程序这里:
int trans(int *num)
{
int a[8];
for(int i=7;i>=0;i--)
{
a[i]=*num%2;
*num=*num/2;
}
cout<<a;
}为什么不可以呢
追答
int a【8】不是char类型
cout《《a 输出的是地址
你应该for 输出每个值
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询