判断输入的字符串是不是一个有效的IP地址
2015-06-26 10:42
316 查看
#include "IPAddressValid.h" #include <string.h> #include <stdlib.h> #include <stdio.h> int fort_fun(char *str, int *pl0, int *pl1, int *pl2); int space_fun(char *str); int zero_fun(char *str,int pl0, int pl1, int pl2); char *str_abstract(char *str); bool isIPAddressValid(const char* pszIPAddr) { int pl0 =0, pl1 =0, pl2 = 0; char *string; string = str_abstract((char *)pszIPAddr); if(fort_fun(string, &pl0, &pl1, &pl2) == 0) { free(string); return false; } if(space_fun(string) == 0) { free(string); return false; } if(zero_fun(string, pl0, pl1, pl2) == 0) { free(string); return false; } free(string); return true; } /*return 1, right format; return 0, wrong format*/ int fort_fun(char *str, int *pl0, int *pl1, int *pl2) { int i=0; int count = 0; int pl[3]; while(str[i]!='\0') { if(str[i] == '.') { if(count == 3) { count =0; break; } pl[count] = i; count++; } i++; } *pl0 = pl[0]; //"保存.的位置" *pl1 = pl[1]; *pl2 = pl[2]; if(count != 3) return 0; else if(pl[1] - pl[0] == 1 || pl[2] - pl[1] == 1)//两个“.”连续 return 0; else if(pl[0] ==0 || str[pl[2]+1] == '\0') //头尾两个“.”在头尾 return 0; else return 1; } /*return 1, right space num and place; return 0, wrong space num and place*/ int space_fun(char *str) { int i=0; int flag=1; while(str[i]!='\0') { if(str[i] == ' ') { flag = 0; break; } i++; } return flag; } int zero_fun(char *str,int pl0, int pl1, int pl2) { int i=0; if(pl0 != 1) if(str[0] == '0') return 0; if(pl1 - pl0 !=2) if(str[pl0+1] == '0') return 0; if(pl2 - pl1 !=2) if(str[pl1+1] == '0') return 0; if(str[pl2+2] != '\0' && str[pl2+1]!= '\0') if(str[pl2+1] == '0') return 0; return 1; } char *str_abstract(char *str)//字符串提取 { int i=0; int j; int count = 0; int flag0 = 0, flag1 = 0; char *start_pl; char *data; while(str[i] != '\0') { if(str[i]!=' ' && flag0 == 0) { flag0 = 1; start_pl = &str[i]; } j = i; while(str[j]!='\0') { if(str[j] != ' ') { flag1 = 1; break; } j++; } if(flag0 == 1 && flag1 ==1) count++; if(flag1 == 0) break; flag1 = 0; i++; } data = (char *)malloc(sizeof(char)*(count+1)); for(i=0; i<count; i++) { data[i] = start_pl[i]; } data[count] = '\0'; return data; }
相关文章推荐
- S5PV210开发系列四_uCGUI的移植
- 游戏设计的艺术:一本透镜的书——第五章 元素共同支撑一个主题
- TCP/IP协议分层详解
- ios 开发记录 点点滴滴
- js关于事件的一些总结(系列一)
- Volley 源码解析
- 【iOS】国际化(对一些有用资源的汇总)
- Unity3D加载外部资源
- 深入分析 Java I/O 的工作机制
- centos性能监控系列一:常用监控命令
- Android WebView的Js对象注入漏洞解决方案
- cxf调用c#的webservice
- centos性能监控系列一:常用监控命令
- linux端口
- gre备考准备什么资料比较好?
- log4j.xml打印日志信息(2)
- Apple Watch 的传感器
- JavaScript introduction.
- 游戏设计的艺术:一本透镜的书——第四章 游戏由各种元素组成
- Cocos2d-js07-添加音乐及音效和发布朋友圈