面试题整理17 输入一个字符串判断一个字符串是否是有效ip地址
生活随笔
收集整理的這篇文章主要介紹了
面试题整理17 输入一个字符串判断一个字符串是否是有效ip地址
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:輸入一個字符串判斷字符串是否為有效ip地址,
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
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則是非法的,如01bool 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"); }《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的面试题整理17 输入一个字符串判断一个字符串是否是有效ip地址的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快速排序及优化
- 下一篇: 编程之美求二进制数中1的个数扩展题