之前去某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;
}
转载于:https://blog.51cto.com/tianyanshentong/1560324