牛客 判断ip地址是否有效

题目描述
输入一个ip地址串,判断是否合法。
输入描述:
每行有一个IP地址,IP地址的形式为a.b.c.d,其中a、b、c、d都是整数。
输出描述:
可能有多组测试数据,对于每组数据,如果IP地址合法则输出"Yes!”,否则输出"No!”。
合法的IP地址为:
a、b、c、d都是0-255的整数。

思路:

1.输入为任意字符串,可以划分出如下输入状态:
D:0~255
E:其他字符
S:.和空字符
2.状态转换如下:
输入为E则return false,输入为.或空字符则检察输入上一数字是否符合状态D。

注意实现的细节:

需要遍历到空字符,也就是比输入字符串长度多一位。
需要对"."和空字符计数,若不等于4则不合法。

#include<iostream>
using namespace std;
bool isValid(string ip)
{
    int num=0;
    int i=0;
    int total=0;
   while(i<ip.size()+1)
   {
       
        if(ip[i]>='0'&&ip[i]<='9')//判断是否为数字
        {
            num=num*10+ip[i]-'0';//得到数字
            
        }
        else if(ip[i]=='.'||ip[i]=='\0')
        {
            if(num<0||num>255)
                return false;
            else{
                total++;
                num=0;
            }
            
        }
        else 
        {
            return false;
        }
        i++;
    }
    
    if(total!=4)
        return false;
    else return true;
}
int main()
{   int n;
    //cin>>n;
    string ip;
    while(cin>>ip)
    {
        
        if(isValid(ip))
            cout<<"Yes!"<<endl;
        else 
            cout<<"No!"<<endl;
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值