ipv4的ip字符串转化为int型
2019-10-31 16:00:51来源:博客园 阅读 ()
ipv4的ip字符串转化为int型
要求:
将现有一个ipv4的ip字符串(仅包含数字,点,空格), 其中数字和点之间的空格(至多一个)是合法的,比如“12 .3. 4 .62”,其他情况均为非法地址。写一个函数将ipv4地址字符串转化成int整数(只能遍历一遍字符串)。
实现思路:
1. 安全检查,null指针
2. 排除最容易的情况:长度、首/尾是否合法
3. 遍历(第2~第len-1个元素):
数字只考虑数值计算以及是否超出范围
" "前后只能为数字和"."
"."前后分别可以为数字或" ";"."不能超过3个;更新数组索引
#include<stdio.h> #include<string.h> int is_digit(char ch)
{
return (ch>='0' && ch<='9')? 1:0; } int ipv4_to_int(char* str, int* part) { int len=0,index=0,i=0; char* ps=str; if(ps == NULL || part ==NULL) return -1; len=strlen(ps); if(len<7 || len >21) return -1; if(!is_digit(ps[0]) || !is_digit(ps[len-1]) ) return -1; part[index]=part[index]*10+(int)(ps[0]-'0'); for(i=1;i<len-1;i++){ char ch = ps[i]; if(is_digit(ch)){ part[index]=part[index]*10+(int)(ch-'0'); if(part[index]>255) return -1; } else if(ch==' ') { if( (is_digit(ps[i-1]) && ps[i+1]=='.') || \ (ps[i-1]=='.' && is_digit(ps[i+1])) ) continue; else return -1; } else if(ch=='.') { if( (is_digit(ps[i-1]) || ps[i-1]==' ') && \ (ps[i+1]==' ' || is_digit(ps[i+1])) ) { index++; if(index>3) return -1; } else return -1; } else return -1; } part[index]=part[index]*10+(int)(ps[i]-'0'); if(part[index]>255) return -1; return 0; } int main(int argc, char *argv[]) { char exm[16][30]={ "255.255.255.255", "0.0.0.0", "12 .3. 4 .56", {}, "2.3..", "121 . 234 . 114 . 115.", ".12.4.7.7", "123.34.55.", "1.3.5.4.2.4", " 123.3.4.5", "123.45.67.67 ", "12 3. 45.67. 67", "12.256.0.1", "A1.34.45.6", "34.56.-2.5", ". . .", }; int part[4]={0,0,0,0}; int j=0; for(j=0;j<15;j++){ if(!ipv4_to_int(exm[j], part)) printf("ip_addr: %30s is <OK> ====> %d.%d.%d.%d\n",exm[j], part[0],part[1],part[2],part[3]); else printf("ip_addr: %30s is Invalid !!!\n",exm[j]); part[0]=part[1]=part[2]=part[3]=0; } return 0; }
欢迎大家批评指正!! :-)
原文链接:https://www.cnblogs.com/savionyin/p/11770905.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:C++随机数笔记
- Z 字形变换 2020-04-14
- 翻转字符串里面的单词 2020-04-10
- 用C++实现:FJ的字符串打印 2020-04-04
- [题记]字符串转换整数-leetcode 2020-04-03
- C++ 字符串输入 2020-03-26
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash