今天写了个判断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; }
原文:http://blog.csdn.net/longhopefor/article/details/24524529