题解 | #合法IP#
Redraiment的走法
http://www.nowcoder.com/practice/24e6243b9f0446b081b1d6d32f2aa3aa
#include<iostream>
using namespace std;
int main(){
string a;
int b[18]={0};
int t=0;
int count=0;
while(getline(cin,a)){
int maxn=a.length();
for(int i=0;i<maxn;i++){
if((a[i]!='.')&&((a[i]<'0')||(a[i]>'9'))){//异常字符
cout<<"NO"<<endl;
return 0;
}
if((((a[i]=='.')&&(a[i+1]=='0'))&&((a[i+2]-'0'>=0)))||((a[0]=='0')&&(a[1]!='.'))){//异常零
cout<<"NO"<<endl;
return 0;
}
if(((a[i]=='.')&&(a[i+1]=='.'))||((a[0]=='.')||(a[maxn-1]=='.'))){//'.'在首尾或者连续
cout<<"NO"<<endl;
return 0;
}
if(a[i]=='.'){
t++;
}
else{
b[t]=b[t]*10+a[i]-'0';
}
}
if(t!=3){
cout<<"NO"<<endl;
return 0;
}
for(int k=0;k<=t;k++){
if((b[k]>=0)&&(b[k]<=255)){
count++;
}
}
if(count==4){
cout<<"YES"<<endl;
}
else{
cout<<"NO"<<endl;
}
}
return 0;
}