比较两个字符串并找到不匹配计数

时间:2015-12-28 10:34:01

标签: c string

我想比较字符串,每个字符与所有其他字符,无论它们是在同一位置还是在另一个位置具有相同的数字。

我不知道如何正确使用字符串比较,我尝试使用forwhile循环使用count,但我不知道。

我的问题是这个。例如。 我的密码是1234。 我的测试是1234。 在这种情况下,我有4人死亡。因为数字处于相同的位置。但在这种情况下。 我的密码是1234。 我的测试是1243。 我有2人死亡,因为1和2处于正确的位置,但4和3处于其他位置,但他们在另一个字符串中。 在这种情况下,我有2人死亡,2人受伤。 抱歉我的英语不是很好。谢谢你的帮助......

enter image description here

3 个答案:

答案 0 :(得分:1)

strcmp不会为您提供给定字符串中匹配的字符数。尝试下面的代码,它将给出输入字符串中匹配的字符数。

#include <string.h>

int GetMatchingChars (const char *s1, const char *s2)
{
    int len1;
    int len2;
    int count = 0;
    int minLen = 0;
    char *shortPtr = NULL;
    char *longPtr = NULL;

    /* First check if the string are equal, return either len, no need to go further */
    if (strcmp (s1, s2) == 0) {
        return strlen(s1); /* or s2 */
    }

    len1 = strlen (s1);
    len2 = strlen (s2);
    minLen = (len1 <= len2)? len1:len2;
    shortPtr = (len1 <= len2)? s1:s2;
    longPtr =  (shortPtr == s1)? s2:s1;

    /* Loop through the shorter string */
    while (*shortPtr != '\0') {
        if (*shortPtr == *longPtr) {
            count++;
        }
        shortPtr++;  
        longPtr++;
    }

    return count;      
}

int main()
{
    char *s1 = "saac";
    char *s2 = "sbab";
    printf ("Matching len = %d\n", GetMatchingChars (s1,s2));
}

答案 1 :(得分:0)

如果你有两个字符串如下:

 char *str1="Hai", *str2="Hai";

使用strcmp(str1,str2)比较 C

中的两个字符串

会返回

0 => if str1==str2
>0 => if str1 > str2, which is lexicographically compared
<0 => if str1 < str2

答案 2 :(得分:0)

在上面的答案中加点。 比较时不需要使用 for循环,因为strncmp将字符串作为输入。 strncmp蜕变是 int strncmp(const char *s1, const char *s2, size_t n);