0

所以我试图检查一个字符串,看看它是否:

  1. 有 8 个或更多字符
  2. 至少有一个大写字母
  3. 至少有一个小写字母
  4. 至少具有以下字符之一 .,?!;:_!@#

这是我的代码:

#include <fstream>
#include <string.h>
using namespace std;
char a[51];
int n,i,countcheck,hardc;
int main()
{
    ifstream fin("parole.in");
    ofstream fout("parole.out");
    fin >> n;
    for (i=1;i<=n;i++)
    {
        fin >> a;
        if(strlen(a)>=8)countcheck++;
        if(strchr(a,'ABCDEFGHIJKLMNOPQRSTUVWXYZ'))countcheck++;
        if(strchr(a,'abcdefghijklmnopqrstuvwxyz'))countcheck++;
        if(strchr(a,'.,?!;:_!@#'))countcheck++;
        if (countcheck==4)hardc++;
        countcheck=0;
    }
    fout << hardc << '\n';
    fin.close();
    fout.close();
    return 0;
}

提前致谢!

4

1 回答 1

2

在 C++ 中,倾向于使用std::string字符数组。然后,您可以使用std::any_of和/或之类的算法std::string::find_first_of。这是一个使用两者的示例:

#include <string>
#include <algorithm>

bool checkString(const std::string& str)
{
    return str.length() >= 8
        && std::any_of(str.begin(), str.end(), ::isupper)
        && std::any_of(str.begin(), str.end(), ::islower)
        && str.find_first_of(".,?!;:_@#") != std::string::npos;
}

用法checkString

#include <iostream>

int main()
{
    std::string tests[] {
        "Test.123",
        "Test#@#$",
        ".,?!;:_@",
        "7Chars!",
        "abcd.123",
        "ABCD.123"
    };

    for (const auto& s : tests)
        std::cout << s << (checkString(s) ? " \t-GOOD\n" : " \t-BAD\n");
}

输出:

Test.123    -GOOD
Test#@#$    -GOOD
.,?!;:_@    -BAD
7Chars!     -BAD
abcd.123    -BAD
ABCD.123    -BAD

现场演示

于 2015-03-26T16:36:42.913 回答