要求:

  将现有一个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. 【转载】C#的ArrayList使用Contains方法判断是否包含某个元素

    在C#的编程开发中,ArrayList集合是一个常用的非泛型类集合,在ArrayList集合中可以使用Contains方法判断是否包含某个元素数据,如果包含则返回true,否则返回false,Cont ...

  2. MTSC2019-腾讯WeTest独家揭秘移动游戏测试和质量保障 QA 黑科技

    WeTest 导读 TesterHome 联合腾讯 WeTest 出品 MTSC2019 重磅游戏测试 Topic ,首次公开揭秘腾讯亿级用户游戏背后的质量保障 QA 黑科技. 2019 年,中国游戏 ...

  3. thinkphp整合系列之极验滑动验证码geetest

    给一个央企做官网,登录模块用的thinkphp验证码类.但是2019-6-10到12号,国家要求央企检验官网漏洞,防止黑客攻击,正直贸易战激烈升级时期,所以各事业单位很重视官网安全性,于是乎集团总部就 ...

  4. Linux shell变量详解

    Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个 ...

  5. SpringBoot开发mockserver及生成swagger接口文档

    通过springboot开发mock server,包含get及post接口,用于练习接口自动化及jmeter很方便 当然,也为后面jenkins持续集成做基础(开发push代码后  → jenkin ...

  6. Leecode之双指针及二分查找

    题目 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数. 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2. 说明: 返回的 ...

  7. Java 内存分配(转)

    Java程序运行在JVM(Java Virtual Machine,Java虚拟机)上,可以把JVM理解成Java程序和操作系统之间的桥梁,JVM实现了Java的平台无关性. 寄存器:JVM内部虚拟寄 ...

  8. 第05组 Beta冲刺(1/4)

    第05组 Beta冲刺(1/4) 队名:天码行空 组长博客连接 作业博客连接 团队燃尽图(共享): GitHub当日代码/文档签入记录展示(共享): 组员情况: 组员1:卢欢(组长) 过去两天完成了哪 ...

  9. [RN] React Native 中使用 stickyHeaderIndices 实现 ScrollView 的吸顶效果

    React Native中,ScrollView组件可以使用 stickyHeaderIndices 轻松实现 sticky 效果. 例如下面代码中: <ScrollView showsVert ...

  10. django -- ORM实现出版社增删改查

    前戏 我们来完成一个图书管理系统的增删改查 表结构设计 1. 出版社 id   name 2. 作者 id  name 3. 书 id  title  出版社_id 4. 作者_书_关系表 id  书 ...