IP地址
分析
一开始以为是普通的字符串处理,但是看到00有点谨慎,思路为:
- 记录所有
.
分隔符的下标,判断一下个数,3个继续- 分割字符串为四个部分,逐一检查 1 是否是数字, 2 是否0<=x <= 255
代码太丑了就不放了
看了AC代码,使用了sscanf(从字符串中读取数据)方法,哦,原来这道题考这个。
知识点
sscanf
头文件
#include"stdio.h"
原型
int sscanf(const char* str, const char* format, ...);
str表示读取的字符串,format是包含了占位符的字符串,...表示可变参数,把解析出来的值写入这些参数中
返回成功读到的值个数,若读取失败返回EOF
c_str
将string类型转化为符合c语言的char *类型
头文件
#include"string"
原型
const char * c_str(string s)
完整代码
#include"iostream"
#include"string"
#include"vector"
using namespace std;
const int N = 20;
int T;
int main(){
cin >> T;
cin.get();
while(T--)
{
string s;
cin >> s;
int a,b,c,d;
char k = 0;
if(sscanf(s.c_str(),"%d.%d.%d.%d%c",&a,&b,&c,&d,&k) == 4){
if(k == 0 && (a >= 0 || a <= 255) && (b >= 0 || b <= 255) && (c >= 0 || c <= 255) && (d >= 0 || d <= 255)) puts("Yes");
else puts("No");
}else{
puts("No");
}
}
}