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

 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写的,很简单的,怀疑是用了正则表达式...

 

你可能感兴趣的:(【W】HDU2206——字符串处理(IP计算))