判断IP地址是否合法

今天写了个判断IP地址是否合法的程序,主要是锻炼对字符串的处理,一些主要的约束条件如下:

1、输入IP为XXX.XXX.XXX.XXX格式
2、字符串两端含有空格认为是合法IP
3、字符串中间含有空格认为是不合法IP
4、类似于 01.1.1.1, 1.02.3.4  IP子段以0开头为不合法IP
5、子段为单个0 认为是合法IP,0.0.0.0也算合法IP

代码如下:

#include <iostream>
#include <string.h>

using namespace std;


bool isinteger(char ch)
{
    if(ch>='0'&&ch<='9')
        return true;
    else
        return false;
}

int chtoint(char *p)
{
    int data=0;
    while(*p!='\0')
    {
        data=data*10+*p-'0';
        p++;
    }
    return data;
}


bool isIPAddressValid(const char* pszIPAddr)
{
    
    if(pszIPAddr==NULL)
        return false;
    int datalen=0,pointlen=0;
    int len=strlen(pszIPAddr)-1;
    cout<<len<<endl;
    if(len==-1)
        return false;

    char *temp=new char[len+1];
    int i=0,k=0;

    while(pszIPAddr[i]==' ')
        i++;
    while(pszIPAddr[len]==' ')
        len--;
    len++;

    while(i<len)
    {

        if(pszIPAddr[i]=='.')
        {
            pointlen++;
            if(pointlen>3||pointlen!=datalen)
                return false;
            i++;
        }
        else
        {
            if(!isinteger(pszIPAddr[i])||pszIPAddr[i]==' ')
                return false;
            while(i<len&&pszIPAddr[i]!='.')
            {

                 temp[k++]=pszIPAddr[i];
                 if(k==5)
                    return false;
                 i++;
            }

            temp[k]='\0';
            if(temp[0]=='0'&&k>=2)
                return false;
            else
            {
            if(chtoint(temp)>=0&&chtoint(temp)<=255)
                datalen++;
            else
                return false;
            }
            k=0;
            if(datalen>4)
                return false;

        }

    }
    if(datalen==4&&pointlen==3)
        return true;
    else
        return false;
}

int main()
{

    const char* intputstr =" .0.0.1" ;

	bool flag=isIPAddressValid(intputstr);
    cout<<flag<<endl;
    return 0;
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值