问题 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;
}
}
}

浙公网安备 33010602011771号