题解 | #合法IP#

合法IP

http://www.nowcoder.com/practice/995b8a548827494699dc38c3e2a54ee9

应该把各种情况考虑全了,应该

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

bool isNum(string str){ // 判断单段字符串 IP
    if(str.empty()) return 0; // 为空不合法
    if(str =="0") return 1; // 单 0  合法
    if(str[0]=='0') return 0; // 首位为0 的不合法
    for(auto c : str){
        if(!isdigit(c)) // 出现字母不合法
            return 0;
    }
    int num = stoi(str); // 转为整型判断
    if(num>255) return 0;
    return 1;
}

int main(){
    string ip;
    while(getline(cin, ip)){
        stringstream ss(ip);
        string str1;
        int sig = 1; // 截至目前均为合法
        int i=0; // 统计输出次数
        while(getline(ss,str1,'.')){// 以 . 分割字符串         
            if(!isNum(str1)){
                sig = 0;
                break;
            }
            i++; // 统计分割段数,鉴别 1.20.3 这种情况
        }
        if(i!=4) sig=0;
        if(sig==1)
            cout<<"YES";
        else cout<<"NO";
        cout<<endl;
    }
    return 0;
}


全部评论
有考虑使用copy(istream_iterator<string>(ss),istream_iterator<string>(),back_inserter(vec)); 缺点是无法指定 delimiter,即固定空格为分隔符。</string></string>
点赞 回复 分享
发布于 2022-02-01 22:26

相关推荐

黑皮白袜臭脚体育生:简历统一按使用了什么技术实现了什么功能解决了什么问题或提升了什么性能指标来写会更好另外宣传下自己的开源仿b站微服务项目,GitHub已经410star,牛客上有完整文档教程,如果觉得有帮助的话可以点个小星星,蟹蟹
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务