以前去某CDN公司,面試遇到過這個題,ios
當時的思路和如今同樣,不過寫的代碼有點亂,面試
此次在bupt的OJ上又看到這個題,果斷AC了一把。ide
http://code.bupt.edu.cn/submission/detail/25944/spa
第一次AC失敗,由於沒有判斷每個分段的字符個數,code
這樣「...」,也會認爲是合法的IPv4地址,加上每一個分段字符個數判斷,就AC了。ip
#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; }