分析给定字符串是否是IP,我们先考虑IP地址如何构成
a.b.c.d
,其中\(a,b,c,d\)均为\(0\)到\(255\)之间的整数
那么我们考虑设计代码框架,如果字符串是IP地址,返回True
,否则返回False
bool solve(string s){
}
接下来考虑检查IP字符串的基本格式,包含以下规则
- 所有字符均为阿拉伯数字或
.
- 出现且仅出现三个
.
int n=s.length(),Stop_count=0;
//n是字符串长度,Stop_count是点号个数
for(int i=0;i<n;i++){
if(s[i]=='.')Stop_count++;
else if(s[i]<0||s[i]>9)return false;
//如果s[i]既不是点号也不是数字,那么字符串一定不是IP地址
}
if(Stop_count!=3)return false;
//判断点号出现次数
我们还需要判断,IP中出现的四个数字是否为\(0\)到\(255\)之间的整数
我们可以考虑用点号把字符串断开,形成四个新的字符串
vector<string>nums;
string now;
//nums是字符串数组,存下所有的数字串
//now是遍历过程中当前的数字数组
for(int i=0;i<n;i++){
if(s[i]=='.'){
nums.push_back(now);
now.clear();
//如果s[i]是点号,需要在i处断开,把i以前的数字和i以后的数字分开
}
else{
now.push_back(s[i]);
//否则把字符正常加入即可
}
}
nums.push_back(now);
//最后还需要加入一次
最后判断nums数组中的每个数字串是否是\(0\)到\(255\)之间的数字
for(int i=0;i<nums.size();i++){
string num=nums[i];
if(num.size()>1&&num[0]=='0')return false;
//0以外的数字不能有前导0
int x=stoi(num);
//stoi可以直接把合法的字符串转化为数字
if(x<0||x>255)return false;
}
return true;
//如果上述所有条件都满足,那么一定是合法IP地址
代码汇总
bool solve(string s){
int n=s.length(),Stop_count=0;
//n是字符串长度,Stop_count是点号个数
for(int i=0;i<n;i++){
if(s[i]=='.')Stop_count++;
else if(s[i]<0||s[i]>9)return false;
//如果s[i]既不是点号也不是数字,那么字符串一定不是IP地址
}
if(Stop_count!=3)return false;
//判断点号出现次数
vector<string>nums;
string now;
//nums是字符串数组,存下所有的数字串
//now是遍历过程中当前的数字数组
for(int i=0;i<n;i++){
if(s[i]=='.'){
nums.push_back(now);
now.clear();
//如果s[i]是点号,需要在i处断开,把i以前的数字和i以后的数字分开
}
else{
now.push_back(s[i]);
//否则把字符正常加入即可
}
}
nums.push_back(now);
//最后还需要加入一次
for(int i=0;i<nums.size();i++){
string num=nums[i];
if(num.size()>1&&num[0]=='0')return false;
//0以外的数字不能有前导0
int x=stoi(num);
//stoi可以直接把合法的字符串转化为数字
if(x<0||x>255)return false;
}
return true;
//如果上述所有条件都满足,那么一定是合法IP地址
}
bool solve(string s){
int n=s.length(),Stop_count=0;
for(int i=0;i<n;i++){
if(s[i]=='.')Stop_count++;
else if(s[i]<0||s[i]>9)return false;
}
if(Stop_count!=3)return false;
vector<string>nums;
string now;
for(int i=0;i<n;i++){
if(s[i]=='.'){
nums.push_back(now);
now.clear();
}
else{
now.push_back(s[i]);
}
}
nums.push_back(now);
for(int i=0;i<nums.size();i++){
string num=nums[i];
if(num.size()>1&&num[0]=='0')return false;
int x=stoi(num);
if(x<0||x>255)return false;
}
return true;
}
标签:count,return,int,编译,IP地址,字符串,原理,false
From: https://www.cnblogs.com/Linxrain/p/18417218