#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define HUNDRED 100
int main()
{
char str[HUNDRED];
char forbiddenChars[] = "!@#$%^&*()+= ";
scanf("%s",str);
for(i=0;str[i];i++)
{
if(str[i] == newStr[]) //this if is supposed to check if they have the same char
{
//prints illegal password
}
}
}`
我被要求编写一个代码,用于检查密码是否为&#34; good&#34;, &#34;良好&#34;意味着密码没有字符!@#$%^&amp; *()+ =并且没有任何相同的字符,例如黄油是坏的,因为它有双t。它也没有空格。
所以我认为我可以制作一个包含所有非法字符的字符串,然后检查它们是否都有一些相同的字符,但我不知道如何做到这一点。请帮帮我
答案 0 :(得分:0)
有几种方法可以做到这一点。
你可以遍历字符串,并为每个字符检查它是否是“坏”字符之一。
或者,您可以使用正则表达式。它们不是ANSI C的一部分,但是它们是POSIX的一部分。我在下面链接了一些关于它们的资源。如果您需要有关正则表达式的示例或更多信息,谷歌将能够帮助您。
C正则表达式的手册页:http://pubs.opengroup.org/onlinepubs/009695399/functions/regcomp.html
正则表达式的官方GNU页面:http://www.gnu.org/software/libc/manual/html_node/Regular-Expressions.html
答案 1 :(得分:0)
将所有非法字符存储在单独的字符串中是正确的 那你为什么不这样做呢?
newStr[] = "!@#$%^&*()+=";
现在newStr
的每个字符都会检查str
是否存在
提示 - 嵌套循环
return false
第一次出现非法字符。
同时您应该检查是否current character == previous character
。如果是,则返回false
。
编写和编辑代码。如果你遇到困难我们会帮助你。
一个暗示:
int strLen = strlen(str);
int newStrLen = strlen(newStr);
for(i = 0; i < newStrLen; i++)
for(j = 0; j < strLen; j++)
if(newStr[i] == str[j])
{
printf("Bad Password");
return 1;
}
现在添加逻辑以识别重复的字符。