如何检查两个字符串是否具有相同的char?

时间:2016-01-06 15:12:07

标签: c string

#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。它也没有空格。

所以我认为我可以制作一个包含所有非法字符的字符串,然后检查它们是否都有一些相同的字符,但我不知道如何做到这一点。请帮帮我

2 个答案:

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

现在添加逻辑以识别重复的字符。