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