首先介绍c++中超好用的截取部分字符串的函数substr();
头文件为#include<string>
函数原型:
string substr(int pos = 0,int n ) const;
函数说明:
参数1pos是可缺省参数,默认为0,即:从字符串头开始读取。
参数2n表示取多少个字符
该函数功能为:返回从pos开始的n个字符组成的字符串,原字符串不被改变
例如
string s="0123456789";
string sub1=s.substr(5); //表示从下标为5开始一直到字符串结束
sub1="56789";
string sub2=s.substr(3,5);//表示从下标为3开始往后取五位
sub2="34567";
再看题
实验8-2-10 IP地址转换(20 分)
一个IP地址是用四个字节(每个字节8个位)的二进制码组成。请将32位二进制码表示的IP地址转换为十进制格式表示的IP地址输出。 输入格式:输入在一行中给出32位二进制字符串。 输出格式:在一行中输出十进制格式的IP地址,其由4个十进制数组成(分别对应4个8位的二进制数),中间用“.”分隔开。
输入样例:11001100100101000001010101110010
输出样例:204.148.21.114
~
~那么
现在就可以开始愉快的水题了。
#include<bits/stdc++.h>//~~万能头真香
using namespace std;
int counter,ans,a[4];
int Atoi(string sss)//自己编的二进制转换成十进制函数(改一下就可以换成任意进制转换)
{
int ans=0;
for(int i=0;i<sss.length();i++)
{
char t=sss[i];
ans=ans*2+t-'0';
}
return ans;
}
int main()
{
string s;
cin>>s;
for(int i=0;i<4;i++)
{
string ss=s.substr(0+8*i,8);
a[i]=Atoi(ss);
}
for(int i=0;i<4;i++)
{
if(i<3)cout<<a[i]<<'.';
else cout<<a[i]<<endl;
}
return 0;
}