c++ | #密码验证合格程序 30行代码#

密码验证合格程序

http://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841

#include <iostream>
using namespace std;
int main (){
    string str;
    while(getline(cin, str)){
        if(str.size() <= 8)
            {cout << "NG" << endl; continue;}
        int num = 0, other = 0, lower = 0, upper = 0;
        bool flag = false;
        for(int i = 0; i < str.size(); ++i){
            if(isdigit(str[i]))    num = 1; 
            else if(islower(str[i]))    lower = 1; 
            else if(isupper(str[i]))    upper = 1; 
            else    other = 1;
            if((num + lower + upper + other) >= 3)
                {flag = true; break;}
        }
        if(!flag)
            {cout << "NG" << endl; continue;}
        for(int i = 0; i < str.size()-3; ++i){
            string ss = str.substr(0,i) + str.substr(i+3);
            if(ss.find(str.substr(i, 3)) != string::npos)
                {flag = false; break;}
        }
        if(flag)
            cout << "OK" << endl;
        else    
            cout << "NG" << endl;
    }
}
全部评论
上面的也能过,但是用例不准确,比如121233Ab456 也是OK的但是上面代码会NG;改为下面的即可: string ss1 = str.substr(0,i+2), ss2 = str.substr(i+1); if((ss1.find(str.substr(i, 3)) != string::npos) || (ss2.find(str.substr(i, 3)) != string::npos)) {flag = false; break;}
1 回复 分享
发布于 2022-03-07 18:17
可以考虑这两个一起用 s.find_first_of s.find_last_of
点赞 回复 分享
发布于 2022-06-13 16:36

相关推荐

03-19 17:49
运营
牛客327038019号:你把那贼低的gpa写上去干嘛
点赞 评论 收藏
分享
评论
6
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务