要求:

  将现有一个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:;
} int ipv4_to_int(char* str, int* part)
{
int len=,index=,i=;
char* ps=str; if(ps == NULL || part ==NULL)
return -; len=strlen(ps);
if(len< || len >)
return -; if(!is_digit(ps[]) || !is_digit(ps[len-]) )
return -; part[index]=part[index]*+(int)(ps[]-''); for(i=;i<len-;i++){
char ch = ps[i];
if(is_digit(ch)){
part[index]=part[index]*+(int)(ch-'');
if(part[index]>)
return -;
}
else if(ch==' ')
{
if( (is_digit(ps[i-]) && ps[i+]=='.') || \
(ps[i-]=='.' && is_digit(ps[i+])) )
continue;
else
return -;
}
else if(ch=='.')
{
if( (is_digit(ps[i-]) || ps[i-]==' ') && \
(ps[i+]==' ' || is_digit(ps[i+])) )
{
index++;
if(index>)
return -;
}
else
return -;
}
else
return -;
} part[index]=part[index]*+(int)(ps[i]-'');
if(part[index]>)
return -; return ;
} int main(int argc, char *argv[])
{
char exm[][]={
"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[]={,,,};
int j=;
for(j=;j<;j++){
if(!ipv4_to_int(exm[j], part))
printf("ip_addr: %30s is <OK> ====> %d.%d.%d.%d\n",exm[j], part[],part[],part[],part[]);
else
printf("ip_addr: %30s is Invalid !!!\n",exm[j]); part[]=part[]=part[]=part[]=;
}
return ;
}

欢迎大家批评指正!!     :-)

ipv4的ip字符串转化为int型的更多相关文章

  1. C++ 字符串分割,并把子字符串转换成int型整数

    主要涉及到string类的两个函数find和substr: find()函数的用法: 原型:size_t find ( const string& str, size_t pos = 0 ) ...

  2. C语言:将16进制字符串转化为int类型值

    将16进制字符串值转换为 int 整型值 此例中用 "1de" 作为测试字符串,实现代码如下: #include <stdio.h> #include <stdl ...

  3. 数组转集合、集合转数组、字符串数组与int型、long型数组等的转换

    在项目中经常会遇到数组转集合.集合转数组.数组之间类型转换等操作 1.数组转集合 为了实现把一个数组转换成一个ArrayList,很多Java程序员会使用如下的代码: String str[] = { ...

  4. C语言atoi函数(将字符串转化为int)

    头文件:#include <stdlib.h> atoi() 函数用来将字符串转换成整数(int),其原型为:int atoi (const char * str); [函数说明]atoi ...

  5. 字符串转化为int数组

    String a = "1,2,3,4,5,6" String str[] = a.split(","); int array[] = new int[str. ...

  6. sql把varchar转化为int型

    select Max(convert(int,id))from member_Info;

  7. c# sql在where查询语句中使用字符串变量与int型变量

    使用where语句访问数据库时where语句用上文中以及定义过的变量来查询. string sql3 = string.Format("update Ships set ContainerN ...

  8. loadrunner 脚本开发-int型变量和字符串的相互转换

    脚本开发-int型变量和字符串的相互转换 by:授客 QQ:1033553122 字符串转化为int型变量 Action2() { int j = 0; j = atoi("12345&qu ...

  9. 关于如何将_variant_t型转化为int型和string类型

    1)将_variant_t型转化为int型 关于将_variant_t型转化为int型,网上有好多好多参考,但好多都很复杂并且还不对,其实整个转化过程就只一行代码可以搞定: _variant_t a; ...

随机推荐

  1. 下载win10系统

    有时候想重装系统但总找不到下载的地方,今天记录一下.nsdn我告诉你,这里有许多软件下载 网站URL:https://msdn.itellyou.cn/ 我想下载一个Windows10 磁力地址 ed ...

  2. logger(三)log4j2简介及其实现原理

    一.log4j2简介 log4j2是log4j 1.x和logback的改进版,据说采用了一些新技术(无锁异步.等等),使得日志的吞吐量.性能比log4j 1.x提高10倍,并解决了一些死锁的bug, ...

  3. Spark GraphX图计算核心算子实战【AggreagteMessage】

    一.简介 参考博客:https://www.cnblogs.com/yszd/p/10186556.html 二.代码实现 package graphx import org.apache.log4j ...

  4. ASP.NET Core MVC 502 bad gateway 超时如何处理

    在网页程序运行需要较长时间运行的时候,ASP.NET Core MVC会出现502 bad gateway请求超时情况.一般默认的超时时间都比较短,我们需要在 web.config 中配置一下.其中  ...

  5. k8s控制器资源(五)

    Pod pod在之前说过,pod是kubernetes集群中是最小的调度单元,pod中可以运行多个容器,而node又可以包含多个pod,关系如下图: 在对pod的用法进行说明之前,有必要先对docke ...

  6. java 深copy

    public static<T> T deepClone(T src) throws IOException, ClassNotFoundException { Object obj = ...

  7. html--前端css样式初识

    一.CSS概述 css是英文Cascading Style Sheets的缩写,称为层叠样式表,用于对页面进行美化,CSS的可以使页面更加的美观.基本上所有的html页面都或多或少的使用css. CS ...

  8. React的使用小规范----长期更新

    用this.state控制组件显示,用this.props控制页面业务数据,用this.other保存其他需要的属性,如计时器setInterval的id

  9. ESA2GJK1DH1K升级篇: 关于升级篇数据校验

    前言 鉴于大家都希望升级的时候加入数据校验,所以就满足大家的要求. 其实我也希望自己做的足够的稳定可靠,让大家使用起来放心. 上一节测试了一节加入校验以后的操作方式,这节来详细的说一下校验部分的代码. ...

  10. django -- ORM实现作者增删改查

    前戏 前面我们已经实现了出版社的增删改查,书的增删改查,书和出版社的对应关系.现在来写一下作者的增删改查和书的对应关系,那书和作者有什么关系呢?一个作者可以写多本书,一本书可以有多个作者,所以书和作者 ...