之前去某CDN公司,面试遇到过这个题,

当时的思路和现在一样,不过写的代码有点乱,

这次在bupt的OJ上又看到这个题,果断AC了一把。

第一次AC失败,因为没有判断每一个分段的字符个数,

这样“...”,也会认为是合法的IPv4地址,加上每个分段字符个数判断,就AC了。

#include 
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
= '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;}