简单的检测字符串是否是ip的算法

来源:互联网 发布:知乎 军工 编辑:程序博客网 时间:2024/06/05 19:47

一个ip地址,如222.111.144.111,那么怎么检测字符串是否是这样的形式呢。

笔试中做到这一题,因为时间不够最后没做出来,回来思考了一下,可以用堆栈的思想来解决本题,下面贴出代码

编程菜鸟,单纯记录自己的算法,还请各位大神多指教。


bool checkIP(string szIP){string stack = "\0";//定义一个堆栈int i = 0;int stackPoint = 0;//栈顶指针int numberOfPoint = 0;//读到的'.'的数量while (szIP[i] != '\0'){if ((szIP[i] > '9' || szIP[i] < '0') && szIP[i] != '.')//检测字符是否是数字或者'.'return false;stack = stack + szIP[i];//入栈if (stack[0] > '9' || stack[0] < '0')//栈底不能是字符'.'return false;if (stack[stackPoint] == '.')//检测到'.'入栈时,前面的数字出栈,并检测是否合法{stack[stackPoint] = '\0';numberOfPoint++;if (numberOfPoint>4)return false;if (stoi(stack)>255 || stoi(stack) < 0)//数字范围在0~255return false;else{stack.clear();stackPoint = 0;}}elsestackPoint++;i++;}if (stack == "\0")return false;if (stoi(stack) > 255 || stoi(stack) < 0)//检测最后一趟return false;elsereturn true;}



思想是:遍历整个字符串,每次扫描的字符首先检查是不是数字或者字符'.',如果是,就压入堆栈,然后检查堆栈底部,堆栈底部不能是字符'.',如果是则报错。

检查完堆栈底部之后,当每次有字符'.'压入堆栈时,取出全部的堆栈内容,检测之前压入的数字的范围,要在0~255之内。这样的出栈最多存在四次,如果超过四次则报错。

通过这种方法,外置一个堆栈,只用循环遍历字符串一遍就能检测字符串是否是ip地址。

原创粉丝点击