一:做这道题的时候再子网掩码的合法性判断卡壳了很多次,最后查找相关的资料得出以下两点
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" }