题解 | #合法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")