一.IP地址转换1
题目详情
编写程序,将十进制IP地址转换为二进制IP地址。
例如输入:202.117.0.20,输出:11001010011101010000000000010100
输入格式:
字符串形式的十进制点分IP地址。
输出格式:
字符串表示的32位二进制IP地址
输入样例:
202.117.0.20
输出样例:
11001010011101010000000000010100
十进制点分IP转换为32位二进制IP(C++)
这道题其实上面那道题就是去掉判断IP的合法性后的题目,然后我试着使用string类来A过它。
- 下面代码
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
int main()
{
string str[4],tstr="00000000";
getline(cin,str[0],'.');
getline(cin,str[1],'.');
getline(cin,str[2],'.');
getline(cin,str[3]);
for(int i=0;i<4;i++)
{ //atoi函数的作用是 把字符串转换成整型数的一个函数
int t=atoi(str[i].c_str()); //c_str是string类中的一个函数,功能是返回当前字符串的首字符地址 ps:c_str()返回的是const char *类型
int j=7;
while(t>0){
tstr[j]=t%2+48;
t=t/2;
j--;
}
tstr[8]='\0';
cout<<tstr;
for(int k=0;k<8;k++)
tstr[k]='0';
//tstr.replace(0,8,"00000000"); //下标从0开始的连续8个字符都被"00000000"替代
}
return 0;
}
二.IP地址转换2
题目详情
编写程序,将32位二进制IP地址转换为十进制点分IP地址。
例如输入:11001010011101010000000000010100,输出202.117.0.20
输入格式:
字符串表示的32位二进制IP地址
输出格式:
字符串形式的十进制点分IP地址。
输入样例:
11001010011101010000000000010100
输出样例:
202.117.0.20
- 下面代码
#include <iostream>
using namespace std;//11001010011101010000000000010100
int main()
{
char **p = new char* [4]; //申请1个 元素为4个char*的一维数组
for(int i=0;i<4;i++)
{
p[i] = new char [9]; //申请1个 元素为9个char型的一维数组
}
cin.get(p[0],9); //最多可接收8个字符,最后一个字符是'\0'
cin.get(p[1],9);
cin.get(p[2],9);
cin.get(p[3],9);
for(int i=0;i<4;i++) //开始将四段二进制整数字符串转换为四段十进制点分IP地址
{ int temp = 0;
int tmp = 1;
for(int j=7;j>=0;j--)
{
temp = temp + ( *(p[i]+j)-48 )*tmp;
tmp = tmp*2;
}
if(i!=3)
cout<<temp<<'.';
else
cout<<temp;
}
for(int i=0;i<4;i++) //释放4个 元素个数为9的一维数组
delete []p[i];
delete []p; //释放1个 元素个数为4的一维数组
return 0;
}