gpt4 book ai didi

c++ - Strchr 不工作,或者我需要一个替代方法来检查给定字符串中的任何字符是否属于另一个字符串

转载 作者:行者123 更新时间:2023-11-28 02:30:04 25 4
gpt4 key购买 nike

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

  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;
}

提前致谢!

最佳答案

在 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

Live Demo

关于c++ - Strchr 不工作,或者我需要一个替代方法来检查给定字符串中的任何字符是否属于另一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29282448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com