P7911 [CSP-J 2021] 网络连接
#include<iostream>
#include<cstring>
using namespace std;
string a,se[1001],c[1001],tse[1001];
int n;
int p(string b)
{
int d=0,m=0;//d表示.的个数,m表示:的个数
int flagm=0;
int wm=0;
for(int i=0;i<b.length();i++)
{
if(b[i]=='.')
{
if(flagm==1)
{
cout<<"NO.1";
return 0;
}
d++;
if(b[i+1]<'0'||b[i+1]>'9'||b[i-1]<'0'||b[i-1]>'9')
{
cout<<"NO.2";
return 0;
}
}
if(b[i]==':')
{
wm=i;//记录:的位置
flagm=1;//标记已出现:
m++;
if(b[i+1]<'0'||b[i+1]>'9'||b[i-1]<'0'||b[i-1]>'9')//判断位置是否合法
{
cout<<"no.3";
return 0;
}
}
}
if(d!=3||m!=1)//判断.和:的个数是否合法
{
cout<<"no.4";
return 0;
}
int s[1001],t=1;
for(int i=0;i<wm;i++)
{
if(b[i]>='0'&&b[i]<='9')
{
s[t]=b[i]-'0';
t++;
}
if(b[i]=='.')//判断每一段数是否合法
{
if(t>3)
{
cout<<"no.5";
return 0;
}
if(t==3)
{
if(s[1]==0)
{
cout<<"no.6";
return 0;
}
int st=s[1]*100+s[2]*10+s[3];
if(st>255)
{
cout<<"no.7";
return 0;
}
st=0;
t=1;
memset(s,0,sizeof(0));
}
if(t==2&&s[1]==0)
{
cout<<"no.8";
return 0;
}
t=1;
memset(s,0,sizeof(0));
}
}
t=1;
memset(s,0,sizeof(0));
for(int i=wm;i<b.length();i++)//同上
{
if(b[i]>='0'&&b[i]<='9')
{
s[t++]=b[i]-'0';
}
}
if(t>5)
{
cout<<"no.9";
return 0;
}
else
{
if(s[1]==0&&t!=1)
{
cout<<"no.10";
return 0;
}
}
return 1;
}
int main()
{
int set=1,ct=1,cs,fcs=0,flag=0,fut=0;
string ps;
cin>>ps;
if(p(ps)==1) cout<<"1";
else cout<<"0";
/*cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a;
if(a=="Server")
{
cin>>se[set];
}
else
{
cin>>c[ct++];
}
}
for(int i=1;i<=set;i++)
{
if(p(se[i])==0) cout<<"ERR"<<endl;
else
{
for(int j=1;j<=i;j++)
{
if(se[i]==se[j])
{
cout<<"FAIL"<<endl;
flag=1;
break;
}
}
if(flag==0) cout<<"OK"<<endl;
}
flag=0;
}*/
return 0;
}
总是在第5和第7个判断返回0,求大佬帮忙看看