面试题整理17 输入一个字符串判断一个字符串是否是有效ip地址
来源:互联网 发布:杀毒清理软件 编辑:程序博客网 时间:2024/05/20 18:46
面试题整理17 输入一个字符串判断一个字符串是否是有效ip地址
标签: 面试题ip字符串问题 http://blog.csdn.net/kuaile123/article/details/21600189
2014-03-20 10:47 1596人阅读 评论(2)收藏举报
分类:
版权声明:本文为博主原创文章,未经博主允许不得转载。
ip地址的形式为XXX.XXX.XXX.XXX。对于XXX表示为0-256的数,但是如果第一位是0而且整数不为0则是非法的,如01
不允许使用strip等函数,只允许使用strlen得到字符串长度
分析:输入字符串长度范围[7,15],以.分段必须能分成四段,每段必须是有效的能转换为整数的字符串,而且转换后整数的值要在[0,255]范围内,并且首位不能为0(除值0外,如00、01、002、013都是不合格的,合格的应该为0、1、2、13),此时可以采用判断字符串长度和整数位数是否相等的方式来进行判断。
代码:自己写了个代码,请大家指正:
- #include "stdafx.h"
- #include <iostream>
- #include "stdlib.h"
- using namespace std;
- //1-3位字符串转换为255以内的整数,如果转换不了则
- bool isValidIpSubInt(char* str);
- //判断是否为有效ip地址,ip地址的形式为XXX.XXX.XXX.XXX
- //对于XXX表示为0-256的数,但是如果第一位是0而且整数不为0则是非法的,如01
- bool isValidIpAddress(char* str)
- {
- if(str == NULL)
- return false;
- int length = strlen(str);
- if(length < 7 || length > 15) //最
- return false;
- int subNum = 1;
- int startIndex = 0;
- int endIndex = 0;
- while(startIndex < length)
- {
- if(subNum > 4)
- return false;
- while(str[endIndex] <= '9' && str[endIndex] >= '0')
- ++endIndex;
- if(endIndex-startIndex > 3 || endIndex-startIndex == 0)
- return false;
- if(str[endIndex] == '.'|| subNum == 4)
- {
- ++subNum;
- char* tempStr = new char[endIndex-startIndex+1];
- for(int i=0; i< endIndex-startIndex; ++i)
- tempStr[i] = str[startIndex+i];
- tempStr[endIndex-startIndex] = '\0';
- bool isValid = isValidIpSubInt(tempStr);
- delete[] tempStr;
- if( isValid == false)
- {
- return false;
- }
- }
- else{
- break;
- }
- startIndex = ++endIndex;
- }
- if( subNum == 5 || startIndex > length)
- {
- return true;
- }else{
- return false;
- }
- }
- //1-3位字符串转换为255以内的整数,如果转换不成功则返回false
- //具体判断方法,如果转换后的整数不在0-255之间的,则返回false
- //001此类的认为是非法的,所以需要判断转换后整数的位数和字符串的长度是否一致,如果不一致则返回false
- bool isValidIpSubInt(char* str)
- {
- if(str == NULL || strlen(str) == 0 )
- return false;
- int length = strlen(str);
- int result = 0;
- while(*str != '\0')
- {
- if(*str < '0' || *str >'9')
- {
- return false;
- }
- result = result*10 + *str-'0';
- ++str;
- }
- if(result <= 255 && result >= 0 && *str == '\0')
- {
- int resultLength = 1;
- int tempResult = result;
- while( tempResult /=10 )
- ++resultLength;
- if(resultLength != length)
- return false;
- }else{
- return false;
- }
- return true;
- }
- void Test(char* testName,char* testString,bool expectedResult)
- {
- cout << "test: " << testName << endl;
- cout << "String is :" ;
- if(testString == NULL)
- {
- cout << "NULL" << endl;
- }else
- {
- cout << testString << endl;
- }
- bool result = isValidIpAddress(testString);
- //cout << " the result is :" << result << endl;
- //cout << "expected result is :" << expectedResult << endl;
- cout << testName << " ";
- if( result == expectedResult)
- {
- cout << "passed !" << endl;
- }
- else
- {
- cout << "failed !" << endl;
- }
- }
- //测试空串
- void Test1()
- {
- char* str = NULL;
- Test("Test1",str,false);
- }
- //测试超过256的串
- void Test2()
- {
- char* str = "255.255.256.255";
- Test("Test2",str,false);
- }
- //测试没有有效输入的串
- void Test3()
- {
- char* str = "1.B.C.D";
- Test("Tes3",str,false);
- }
- //测试前面是0的串
- void Test4()
- {
- char* str = "01.0.0.0";
- Test("Test4",str,false);
- }
- //测试正确最长串
- void Test5()
- {
- char* str = "255.255.255.255";
- Test("Test4",str,true);
- }
- //测试正确最短串
- void Test6()
- {
- char* str = "0.0.0.0";
- Test("Test6",str,true);
- }
- int main()
- {
- Test1();
- Test2();
- Test3();
- Test4();
- Test5();
- Test6();
- system("pause");
- }
0 0
- 面试题整理17 输入一个字符串判断一个字符串是否是有效ip地址
- 面试题整理17 输入一个字符串判断一个字符串是否是有效ip地址
- 判断一个字符串是否是IP地址
- 判断输入的字符串是不是一个有效的IP地址
- 判断一个字符串是否是合法IP地址
- python实现判断一个字符串是否是合法IP地址
- 【Python】判断一个字符串是否是合法IP地址
- java判断输入的字符串是否是一个IP
- 如何判断字符串是否是有效的的IP地址
- 判断一个字符串的ip是否是IP合法的ip地址
- 判断一个字符串的ip是否是IP合法的ip地址
- 2014华为机试-判断输入的字符串是不是一个有效的IP地址
- 判断IP 字符串是否为有效地址
- 如何判断用户输入的字符串是否是IP地址
- 判断一个字符串是否是有效IP(包括IPv4和IPv6)
- Qt 判断一个IP地址是否有效
- 面试题初级-求字符串最后一个单词的长度和判断ip地址的合法性
- C#下判断一个字符串是否是ip地址的函数
- Android中Xposed框架篇-微信实现本地视频发布到朋友圈功能
- PHP的mail()函数发送邮件,其中的html标签未被正常解析的问题
- oracle spool 命令
- ASP.NET导出数据功能
- RecyclerView 通用适配 BaseQuickAdapter
- 面试题整理17 输入一个字符串判断一个字符串是否是有效ip地址
- 数据加密算法详解
- 【SpringBoot】AutoConfiguration 解密
- bootstrap Datatable搜索
- linux中fork()函数详解(原创!!实例讲解)
- 数组的相关计算
- Numpy
- 多线程(十)CountDownLatch、CyclicBarrier和Semaphore
- poj1258 最小生成树