1. 程式人生 > 其它 >leetcode-華為專題-468. 驗證IP地址

leetcode-華為專題-468. 驗證IP地址

class Solution {
public:

    vector<string> split(string str, string flag){
        vector<string> res;
        int fd = 0;
        // 注意前面是賦值。fd = str.find(flag)
        // 後面是判斷,如果fd == str.npos說明沒找到
        while((fd=str.find(flag))&&fd!=str.npos){
            res.push_back(str.substr(
0,fd)); // 從0開始擷取fd個字串 str = str.substr(fd+1); // 更新str } res.push_back(str); // 加上最後還剩下的尾部 return res; } string validIPAddress(string IP) { if(checkIPv4(IP)){ return "IPv4"; }else if(checkIPv6(IP)) return "IPv6"; else
return "Neither"; } bool checkIPv4(string IP){ vector<string> IPv4str = split(IP,"."); // 按照點分割 int len = IPv4str.size(); if(len!=4) return false; for(auto s:IPv4str){ if(s.empty()||s.size()==0||s.size()>3) // 為空,或者位數超過3
return false; // 判斷每一位是不是數字 for(auto str:s){ cout<<"str1:"<<endl; if(!isdigit(str)) return false; } // 只有在上面判斷完成是不會數字基礎上,才能呼叫stoi if(to_string(stoi(s)).size()<s.size()) // 判斷是否含有無效0 return false; if(stoi(s)<0||stoi(s)>255) // 判斷是不是超過int範圍 return false; } return true; } bool checkIPv6(string IP){ vector<string> IPv6str = split(IP,":"); // 按照點分割 int len = IPv6str.size(); if(len!=8) return false; for(auto s:IPv6str){ if(s.empty()||s.size()==0||s.size()>4) // 為空,或者位數超過4 return false; for(char str:s){ // 對每一位範圍判斷 if(!(isdigit(str)||str>='a'&&str<='f')) if(!(isdigit(str)||(str>='a'&&str<='f')||(str>='A'&&str<='F'))) return false; } } return true; } };