1. 程式人生 > >判斷字串是否為合法ip

判斷字串是否為合法ip

週三去B商搜面試,連著面了三面,對體力也是一個不小的考驗,三面也是技術面,其中程式碼題為判斷字串是否為合法IP

之前IP的題寫過32位int轉換為IP的,還好數字串判斷是否能成為IP的DFS,字串判斷IP的還沒遇見過

經過思考之後,先確定方向,是一道字串處理的題,合法ip的話主要有以下幾點:

1.合法IP只有'.'和'1-9'其他的字元都幹掉

2.IP串為四個數字3個'.'不符合的幹掉

3.連續的'..'幹掉

4.數字在0-255以外的幹掉

5.非0數字前有0的也幹掉

然後開始手寫,之前寫的時候沒考慮到010的情況,後來發現了加了一個邏輯判斷,總的來說思路沒啥問題,附上程式碼:

bool isValidIP(char* str){
	if (NULL==str)
	{
		return false;
	}
	bool preIsNum=false;
	int numOfPoint=0;
	int numOfNum=0;
	char *p=str;
	while ('\0'!=*p&&numOfPoint<=3&&numOfNum<=4)
	{
		if('.'!=*p&&(*p<'0'||*p>'9')){
			return false;
		}
		if('.'==*p){
			 if (!preIsNum)
			 {
				 return false;
			 }
			 else
			 {
				 preIsNum=false;
				 numOfPoint++;
			 }
			 p++;
		}
		else{
			int tmp=0;
			bool prevHasZero=0;
			while ('\0'!=*p&&*p>='0'&&*p<='9')
			{
				if (prevHasZero==true)
				{
					return false;
				}
				if (*p=='0'&&tmp==0)
				{
					 prevHasZero=true;
				}
				tmp=tmp*10+(*p-'0');
				p++;
			}
			if (tmp<0||tmp>255)
			{
				return false;
			}
			numOfNum++;
			preIsNum=true;
		}
	}
	if (numOfPoint==3&&numOfNum==4)
	{
		return true;
	}
	else{
		return false;
	}
}

附上檢查程式碼和結果:


int main(){
	char a[][10] ={"0","000000"};
	char *b[] ={"","a","000","0.123.456.2","000.000.0.0",".0.0.3.2",".0.0.0.0","1.1.256.1","1.2.a.2","00.0.0.0","0.00.0.0","010.010.010.010"};
	char *c[] ={"0.0.0.0","1.1.1.1","100.100.100.100","255.255.255.255"} ;
	ofstream outfile;
	outfile.open("out.txt");
	cout<<setw(20)<< setiosflags(ios::left)<<"無效IP"<<setw(20)<<"判斷結果"<<endl;
	outfile<<setw(20)<< setiosflags(ios::left)<<"無效IP"<<setw(20)<<"判斷結果"<<endl;
	for (int i=0;i<sizeof(b)/sizeof(b[0]);i++)
	{
		cout<<setw(20)<< setiosflags(ios::left)<<b[i]<<setw(20)<<isValidIP(b[i])<<endl;
		outfile<<setw(20)<< setiosflags(ios::left)<<b[i]<<setw(20)<<isValidIP(b[i])<<endl;
	}
	cout<<setw(20)<< setiosflags(ios::left)<<"有效IP"<<setw(20)<<"判斷結果"<<endl;
	outfile<<setw(20)<< setiosflags(ios::left)<<"有效IP"<<setw(20)<<"判斷結果"<<endl;
	for (int i=0;i<sizeof(c)/sizeof(c[0]);i++)
	{
		cout<<setw(20)<< setiosflags(ios::left)<<c[i]<<setw(20)<<isValidIP(c[i])<<endl;
		outfile<<setw(20)<< setiosflags(ios::left)<<c[i]<<setw(20)<<isValidIP(c[i])<<endl;
	}
	outfile.close();
}


相關推薦

判斷字串是否合法ip

週三去B商搜面試,連著面了三面,對體力也是一個不小的考驗,三面也是技術面,其中程式碼題為判斷字串是否為合法IP 之前IP的題寫過32位int轉換為IP的,還好數字串判斷是否能成為IP的DFS,字串判斷IP的還沒遇見過 經過思考之後,先確定方向,是一道字串處理的題,合法ip的

[iOS]判斷字串是否合法郵箱地址

- (IBAction)saveEmailAction:(id)sender { if ([self isValidateEmail:_mailField.text]) { [self.delegate saveEmail:_mailField.text];

數字字串是否合法IP地址

以下程式碼亟待改進 #include <iostream> #include <string> using namespace std; bool check_range(string s){ int i = stoi(s); if (i

Python判斷字串是否合法標示符

這學期在學習編譯原理,最近的上機作業就是做一個簡單的詞法分析器,在做的過程中,突然有個需求就是判斷一個字串是否為合法的標示符,因為我是用python語言做的,做的是Python的詞法分析器,於是下面分享以下怎樣判斷一個字串是合法的標示符。 首先,我們來熟悉以下

shell 判斷字串是否有效ip地址

IPADDR=192.168.1.1 (有效)IPADDR=192.168.0.254(有效)IPADDR=10.0.0.0(無效)IPADDR=0.1.1.1(無效)IPADDR=192.168.001.001 (無效)IPADDR=1aa.2bb.3cc.4dd (無效)IPADDR=aaa.bbb.cc

正則判斷空或合法ip欄位

^(\\s&&[^\\f\\n\\r\\t\\v])* 判斷為空 (2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2})(\.(2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2})){3} 判斷為合法ipv4地址 /^[\s

判斷字串是否IP地址

bool IsIPAddress(const char *str) { if(str==NULL || *str=='\0' || *str=='.') //這個地方就不解釋了 return false; int len=strlen(str); int i=0,

判斷字串是否IP地址。

public class Main { private boolean isRightIp(String ipAddress){ String ips[] = ipAddress.split("\\.");

判斷某個字串是否是合法IP

使用的標頭檔案以及巨集定義: #include <stdio.h> #include <string.h> // strlen() #include <a

python實現判斷一個字串是否是合法IP地址

一個剛結束的筆試題目,簡單貼一下吧,下面是具體實現: #!usr/bin/env python #encoding:utf-8 ''' __Author__:沂水寒城 功能:判斷一個字串是否是合法IP地址 ''' import re def judge_lega

依次判斷一系列給定的字串是否合法的 Python 識別符號

# -*- coding: utf-8 -*- """ Created on Wed Aug  1 11:08:45 2018 @author: 金曉 """ #判斷是否為合法的Python識別符號 #識別符號:首字元必須是字母或下劃線,後面的字元只能是字母、數字、下劃線

js 判斷字串是否數字(正整數)

/** * 判斷字串是否為數字 * @param nubmer * @returns {boolean} */ function checkRate(nubmer) { //判斷正整數/[1−9]+[0−9]∗]∗/ var re = /^[0-9]+.?[0-9]*/;

java 判斷字串是否亂碼

以下是一個事例: import java.util.regex.Matcher; import java.util.regex.Pattern; public class MessyCodeCheck { public static boolean isChinese(char c) {

java判斷字串是否數字或小數

public static boolean isNumeric(String str){ Pattern pattern = Pattern.compile("[0-9]*"); if(str.indexOf(".")>0){//判斷是否有小數點 if(str.

java判斷字串是否亂碼

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

[轉]Python判斷字串是否字母或者數字

str_1 = "123" str_2 = "Abc" str_3 = "123Abc" #用isdigit函式判斷是否數字 print(str_1.isdigit()) Ture print(str_2.isdigit()) False print(str_3.isdigit()) False #

正則表示式判斷字串是否數字

IF cl_abap_matcher=>matches( pattern = '^(-?[1-9]\d*(\.\d*[1-9])?)|(-?0\.\d*[1-9])$' text = '1.01' ) = abap_true. WRITE '數字'. ELSE.

java判斷字串是否正負整數或浮點數

package org.fiend.basetest; import org.apache.commons.lang3.StringUtils; import java.util.regex.Pattern; /** * 判斷字串是否為正負整數或浮點數 * @author Adminis

java 判斷字串是否數字(包含負數)

public static void main(String[] args){ System.out.println(AssistController.isNumeric("-77"));}public static boolean isNumeric(String str){ Pattern pa

正則判斷字串是否數值(正數、負數、小數)

在用MapReduce進行處理業務時,發現HDFS中的資料有的列為漢字、有的列為字串、有的列為正數、有的為負數、有的為小數,根據業務要求只有數字參與運算,因此首先清洗資料,用正則提取所有數值: public boolean isNumber(String str){    &