题目
BUPT 2012 网研 ProblemC(oj)
我们都学过计算机网络,了解IPV4地址的点分十进制表示法。
你的任务很简单:判断一个字符串是否是一个合法的点分十进制表示的IPV4地址。
最低的IP地址是0.0.0.0,最高的IP地址是255.255.255.255。
PS :方便起见,认为形似00.00.00.00的IP地址也是合法的。
输入描述
第一行是一个整数T,代表输入还剩下T行
以下的T行,每行都是一个字符串(不含空白字符)。字符串的长度保证不超过15,不小于1
输出描述
对于每个字符串,输出一行。
如果它是一个合法的IPV4地址,输出Yes。
否则,输出No。
示例
输入
3
59.64.130.18
f.a.t.e
1.23.45.678
输出
Yes
No
No
题解
int sscanf(const char *str, const char *format, ...)
从字符串读取格式化输入
- 如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。
- 对于int型变量scanf("%d", &d),如果输入12pppp34,则结果仍然正确,只不过读入为12
#include <bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
for(int i=1;i<=t;i++)
{
char s[100];
cin>>s;
int a1,a2,a3,a4;
char c;//防止最后一个数字后有字符
int res=sscanf(s,"%d.%d.%d.%d%c",&a1,&a2,&a3,&a4,&c);
int flag=0;
if(res==4)
{
if(a1>=0&&a1<=255&&a2>=0&&a2<=255&&a3>=0&&a3<=255&&a4>=0&&a4<=255)
flag=1;
}
cout<<(flag==1?"Yes":"No")<<endl;
}
}