一:做这道题的时候再子网掩码的合法性判断卡壳了很多次,最后查找相关的资料得出以下两点
1.首先判断子网掩码是否符合ip地址的要求([0,255])
2.然后将ip地址从字符串转换为long int的mask,通过return (mask|mask-1) == oxFFFFFFFF ? true:false;即可实现对于子网掩码的有效判断。

二:有关ip地址从字符串转换为可处理的vector<int>或者vector<string>的做法有很多,其中不乏很多值得借鉴的地方,我贴出我个人更习惯的处理方法。
c++做这种输出处理时不如python代码简介,但是总的来说可以通过sstream头文件来简化处理逻辑,当然会牺牲一些效率,具体如下;

#include <iostream>
#include <sstream>
using namespace std;

vector<int> preProcess(string str){
    for(auto &c:str){
        if(c=='.'){
            c = ' '; //将句号替代为空格然后可以被io库简单处理
        }
    }
    istringstream record(str); //把处理过后的str当作sstream对象
    string temp;
    vector<int> ret;
    while(record>>temp){
        ret.push_back(stoi(temp));
    }
    return ret;
}

void testPreProcess(){
    auto ivec = preProcess("255.255.255.0");
    for(auto i:ivec){
        cout << i << " ";
    }
    cout << endl;
}

int main(){
    testPreProcess(); //应当输出"255 255 255 0"
}