判斷字符串是否是合法的ipv4地址

之前去某CDN公司,面試遇到過這個題,

當時的思路和現在一樣,不過寫的代碼有點亂,

這次在bupt的OJ上又看到這個題,果斷AC了一把。

http://code.bupt.edu.cn/submission/detail/25944/

第一次AC失敗,因爲沒有判斷每一個分段的字符個數,

這樣“...”,也會認爲是合法的IPv4地址,加上每個分段字符個數判斷,就AC了。


#include <iostream>
using namespace std;

bool is_valid_ip (const string& ip) {
    int valid_seg_size = 0;
	int one_seg = 0;
	int seg_len = 0;
	for (int i=0; i<ip.length(); i++) {
	    if (ip[i] >= '0' &&
				ip[i] <= '9') {
			one_seg = one_seg*10 + (ip[i]-'0');
			seg_len++;
		} else if (ip[i] == '.') {
			if (one_seg<=255 && seg_len>0) {
				valid_seg_size++;
			} else {
			    return false;
			}

		    one_seg = 0;
			seg_len = 0;
		} else {
		    return false;
		}
	}

	if (one_seg<=255 && seg_len>0) {
	    valid_seg_size++;
	}

	if (valid_seg_size == 4) {
		return true;
	} else {
	    return false;
	}
}

int main () {
    int n;
	string ip;
    cin >> n;

	while ((--n) >= 0) {
	    cin >> ip;
		//cout << ip << endl;
		cout << (is_valid_ip(ip) ? "Yes" : "No") << endl;
	}

	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章