问一下,做这个题的时候每一次都会有一个点现实读到':',但却应该是2。 以下我的代码:
#include<iostream>
#include<cstring>
using namespace std;
string ipv6,ipv6z[9]={};
int ipv6zn=0;
int main()
{
cin>>ipv6;
bool l0=0;
for(int i=0;i<8;i++)
{
ipv6z[i]="0";
}
for(int i=0;i<ipv6.length();i++)
{
if(ipv6[i]!=':'&&ipv6[i]!='0')
{
l0=1;
}
else if(ipv6[i]==':')
{
l0=0;
ipv6zn++;
}
if(l0&&ipv6z[ipv6zn]=="0")
{
ipv6z[ipv6zn][0]=ipv6[i];
}
else if(l0)
{
ipv6z[ipv6zn]+=ipv6[i];
}
}
int f=0,d=0,l=0,mf=8,ml=0;
for(int i=0;i<=8;i++)
{
if(ipv6z[i]=="0")
{
if(i<=mf)
{
mf=i;
}
ml++;
}
else
{
if(ml>l)
{
d=i-1;
f=mf;
l=ml;
}
ml=0;
mf=8;
}
}
bool dom=1;
for(int i=0;i<8;i++)
{
if(i>=f&&i<=d&&dom)
{
if(f==0)
{
cout<<"::";
}
else
{
cout<<':';
}
dom=0;
}
else if(i<f||i>d)
{
cout<<ipv6z[i];
if(i!=7)
{
cout<<':';
}
}
}
}
另外,这个题测试点好像是随机生成的,我同一个代码连续提交两遍后WA的点不同。