笔试:使用fprintf和sscanf 判断IP字符串的正确性和数字IP之间的转换

/*****************************************************************
sscanf(const char *buffer,const char *format,[argument ]...)
它的返回值是参数的数据,也就是argument的个数,
buffer:存储的数据,format:格式控制字符串,argument:选择性设定字符串。
******************************************************************/

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
bool isIP(char *str)
{

    int a,b,c,d;
    int ret=0;
    int len=strlen(str);
    str[len]='\0';
    ret=sscanf(str,"%d.%d.%d.%d",&a,&b,&c,&d);
    if(ret==4&&(a>=0&&a<=255)&&(b>=0&&b<=255)&&(c>=0&&c<=255)&&(d>=0&&d<=255))
        return 1;
    else
        return 0;
}
char  *value_to_ip(const long& nValue,char *strTemp)
{
    sprintf( strTemp,"%ld.%ld.%ld.%ld",
                    (nValue&0xff000000)>>24,
                    (nValue&0x00ff0000)>>16,
                    (nValue&0x0000ff00)>>8,
                    (nValue&0x000000ff) );
    return (strTemp);
}
int main(void)
{
    char table[4][15]={"192.168.1.1","0.0.0.0","19999.11.11","199111057239"};
    for(int i=0;i<4;i++)
        cout<<isIP(table[i])<<endl;

    long int num[4]={0,18224001830,2010021050021,610};
    char temp[64]={0};
    for(int i=0;i<4;i++)
        cout<<value_to_ip(num[i],temp)<<endl;
    return 0;
}


你可能感兴趣的:(C++,c,算法,笔试面试)