您的位置:首页 > 其它

【W】HDU2206——字符串处理(IP计算)

2010-02-27 14:15 771 查看
http://acm.hdu.edu.cn/showproblem.php?pid=2206

有是一个比较变态的题目,在网上搜了很多关于注意事项的,都能检测出来啊!怎么还是AC不了呢????

1.注意输入数据中只能是数字和‘。'
2,“。”出现的是次数只能是3次,
3,每次间隔数字的值不能大于255
4,数字的长度不嫩超过3个,比如0001,就不行
有了这个4点应该可以通过了!!!!

2206太变态了,不知道wa了多少次,我就想不通了为什么000.000.000.000就是对的!
要注意有以下点
1.不能出现不是数字和点的其他字符
2.三个点四部分,每部分在0~256之间,且不能有任何一部分是空的(没有数字)
3.最变态的也就是这点,其实是想到的,就是每部分不是0,那么该部分首位就不能出现0
但是我想不通为什么是0的时候就可以重复

自己总结的规则:
1、不存在非法字符(除'.'和数字以外的字符)
2、3个'.'
3、每个10进制数最多3位,且无前导0
4、每个10进制数范围是[0,255]

以上是网上搜的注意事项,烦呀!

下面附我的未AC的代码,大牛来帮我看看呀!谢谢了...

#include<iostream>
#include<string>
using namespace std;

bool isDigital(char ch)
{
if(ch>='0'&&ch<='9')
return true;
return false;
}

int main()
{
char strcin[105];
int i,j,k,t,len,x[4],sum;
bool flg,zeroflg;

while(cin.getline(strcin,100))
{
len = strlen(strcin);
flg = true;
zeroflg = true;
k = 0;
x[0]=x[1]=x[2]=x[3]=0;

for(i=0;i<len;i++)
{
if(i==0)
{
if(!isDigital(strcin[i])) //.213
{
flg = false;break;
}
else
{
if(strcin[i]!='0')
{
zeroflg = false;
}
j=1;
x[j] = strcin[i]-'0';
continue;
}
}
if(isDigital(strcin[i]))
{
if(zeroflg&&strcin[i]!='0'&&j!=0)  //不是0,那么该部分首位就不能出现0
{
flg = false;break;
}
if(zeroflg&&strcin[i]=='0')
j++;
else
j++;

if(j<=0||j>=4)  //12323
{
flg = false;break;
}
x[j] = strcin[i]-'0';
}
else if(strcin[i]=='.')
{
if(j<=0||j>=4)  //..
{
flg = false;break;
}
if(i==len-1)            //145.45.445.
{
flg = false;break;
}
int m = 1;
sum = 0;
for(t=j;t>0;t--)         // caculate
{
sum += m*x[t];
m*=10;
}
if(sum<0||sum>255)
{
flg = false;break;
}

j=0;k++;
zeroflg = true;
x[0]=x[1]=x[2]=x[3]=0;

if(k>3)    //154.15.85.84.81.  dot more than three
{
flg = false;break;
}
}
else                              //*216
{
flg = false;break;
}
}

if(flg)
{
cout<<"YES"<<endl;
}
else
{
cout<<"NO"<<endl;
}

memset(strcin,0,105);

}
return 0;
}


看到一个人用JAVA写的,很简单的,怀疑是用了正则表达式...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: