十进制点分IP转换为32位二进制IP

题目内容:

编写程序,将十进制点分的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;  
}

猜你喜欢

转载自blog.csdn.net/qq_27928585/article/details/80023268
今日推荐