题解 | #合法IP#
合法IP
https://www.nowcoder.com/practice/995b8a548827494699dc38c3e2a54ee9
需要注意的点:
- “.”不在开头,也不能在结尾
- 当各段数字大于1位时,开头不应为0,比如出现“01.1.2.3”
- “.”的数量应该为3
- “.”之间不应相邻,即各段不应为空
- 各段数字不应出现除0~9以外字符
- 各段数字不应大于255
#include <iostream>
#include <string>
using namespace std;
bool check(string s){
int len = size(s);
for(int i = 0; i < len; i ++)
if(!(s[i] >= '0' && s[i]<= '9'))
return true;
if(len == 0) return true;
else if(len > 1 && s[0] == '0') return true;
else{
int count = 0;
for(int i = 0; i < len; i ++){
count *= 10;
count += (s[i] - '0');
}
if(count > 255) return true;
else return false;
}
}
int main() {
string s;
getline(cin, s);
int len = size(s);
// int count = 0; // 计算每一部分是否小于等于255
string part;
int count2 = 0; // 计算"."出现次数
int flag = 0;
for(int i = 0; i < len; i ++){
if(s[i] != '.'){
part.append(1,s[i]);
}else{
count2 ++;
if(check(part)){
flag = 1;
break;
}
else{
part.clear();
flag = 0;
}
}
}
if (flag || count2 != 3 || check(part)) {
cout << "NO" << endl;
}else{
cout << "YES" << endl;
}
}
// 64 位输出请用 printf("%lld")
巨人网络成长空间 50人发布
