题目描述
? 在基于 Internet 的程序中, 我们常常需要判断一个 IP 字符串的合法性.
合法的 IP 是这样的形式:
A.B.C.D
其中 A,B,C,D 均为位于 [0, 255] 中的整数. 为了简单起见, 我们规定这四个整数中不允许有前导零存在, 如 001 这种情况.
现在, 请你来完成这个判断程序吧 ^_^
?
输入
? 输入由多行组成, 每行是一个字符串, 输入由 "End of file" 结束.
字符串长度最大为 30, 且不含空格和不可见字符
?
输出
? 对于每一个输入, 单独输出一行
如果该字符串是合法的 IP, 输出 Y, 否则, 输出 N
?
样例输入
- 1.2.3.4
- a.b.c.d
- 267.43.64.12
- 12.34.56.bb
- 210.43.64.129
- -123.4.5.6
- ?
样例输出
Y N N N Y N
代码
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- #include<cstring>
- #include<cmath>
- #include<sstream>
- using namespace std;
- int main()
- {
- string s;
- stringstream ss;
- while(getline(cin,s)&&s!="End of file")
- {
- int f=0;
- for(int i=0;i<s.size();i++)
- if(s[i]=='.') s[i]=' ';
- ss.clear();
- ss<<s;
- string buf;
- while(ss>>buf)
- {
- for(int i=0;i<buf.size();i++)
- {
- if(!(buf[i]>='0'&&buf[i]<='9'))
- {
- cout<<"N"<<endl;
- f=1;
- break;
- }
- }
- if(f) break;
- int b;
- stringstream st;
- st<<buf;
- st>>b;
- if(!(b>=0&&b<=255))
- {
- cout<<"N"<<endl;
- f=1;
- break;
- }
- if(f) break;
- }
- if (!f)cout<<"Y"<<endl;
- ss.str("");
- }
- return 0;
- }
思路
复习一下字符串转数字吧.
stringstream 挺好用的 , 复用时要记得清空缓存.
对于 string 类型字符串 用 stringstream 转为数字
来源: http://www.bubuko.com/infodetail-3320994.html