Blog / 阅读

判断IP地址是否合法

by admin on 2014-04-26 12:01:15 in ,



今天写了个判断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
代码如下:




[cpp] view plaincopy
#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;  
}  



写评论

相关文章

上一篇:resultMap使用不当导致出现There is no WRITEABLE property named 'student_id' in class 'com

下一篇:DES加密算法详解- -

评论

写评论

* 必填.

分享

栏目

赞助商


热门文章

Tag 云