首先介绍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个十进制数组成(分别对应48位的二进制数),中间用“.”分隔开。 
输入样例: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;
}