华为机试字符串
https://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841?tpId=37&tab=answerKey
#include<iostream>
#include<string>
using namespace std;
/*******统计字符种类**********/
int count(string s)
{
int xiaoxieflag=0;
int daxieflag=0;
int shuziflag=0;
int qitaflag=0;
int res;
for(int i=0;i<s.size();i++)
{
if('A'<=s[i]&&s[i]<='Z')
{
daxieflag=1;
}
else if('a'<=s[i]&&s[i]<='z')
{
xiaoxieflag=1;
}
else if('0'<=s[i]&&s[i]<='9')
{
shuziflag=1;
}
else
{
qitaflag=1;
}
}
res=daxieflag+shuziflag+xiaoxieflag+qitaflag;
return res;
}
/*********判断是否有字串重复*1重复了*********************/
bool strpeat(string s)
{ string temp;
for(int i=0;i<s.size()-2;i++) //枚举
{
temp=s.substr(i,2);//长度为2的字串
if(s.find(temp,i+2)==string::npos) //从下标i+2开始查找字串
{
continue;
}
else
{
return true;
}
}
return false ;
}
int main()
{
string s;
int passwordlen=0;
int num=0;
bool isrepeat;
while(getline(cin,s))
{
passwordlen=s.size();
num=count(s);
isrepeat=strpeat(s);
if(!isrepeat&&num>=3&&passwordlen>8)
{
cout<<"OK"<<endl;
}
else
{
cout<<"NG"<<endl;
}
}
return 0;
}