问题 C: ip

问题 C: ip

时间限制: 1 Sec  内存限制: 128 MB
提交: 8  解决: 2
[提交][状态][讨论版]

题目描述

判断字符串是不是一个合法的ip地址.为简单考虑,仅考虑ipv4的情况,即合法ip为形同"a1.a2.a3.a4",且0<=ai<=255。

输入

多组测试数据,每组一个字符串,其中不包括空格,Tab以及回车。

输出

若合法,输出"Yes",否则输出"No"。

样例输入

110.1.2.51
f.a.t.e

样例输出

Yes
No

提示

我们认为110.001.002.051是合法的。

IP每位不能超过三位

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<queue>
#include<map>
using namespace std;
int main()
{
    string s;
    while(cin>>s)
    {
        int sum=0,i,j,r[4];//记录.的个数
        j=0;
        for(i=0;i<s.size();i++)
        {
            if(s[i]>='0'&&s[i]<='9')
                sum++;
            if(s[i]=='.')
                r[j++]=i;
        }
        //cout<<r[0]<<r[1]<<r[2]<<endl;
        if(sum+3!=s.size()||r[0]==r[1]-1||r[1]==r[2]-1||s[0]=='.'||s[s.size()-1]=='.')
            cout<<"No"<<endl;
        else
        {
            int d[4]={0},sum2=0,k=0,t=0;
            for(i=0;i<=s.size();i++)
            {
                if((s[i]=='.'||i==s.size())&&i-k<=3)
                {
                    for(j=k;j<i;j++)
                      d[t]=d[t]*10+s[j]-'0';
                    k=i+1;
                    t++;
                }
            }
            for(i=0;i<t;i++)
            {
                if(d[i]>=0&&d[i]<=255) sum2++;
            }
 
             //cout<<sum2<<endl;
             if(sum2==4&&t==4)
             cout<<"Yes"<<endl;
             else
             cout<<"No"<<endl;
        }
    }
}



posted @ 2017-03-05 20:54  X_na  阅读(121)  评论(0)    收藏  举报