2015-12-28 3 views
-7

Я хочу сравнить строки, каждый символ со всеми остальными, независимо от того, находятся ли они в одном и том же положении или имеет равное число в другом положении.Сравните две строки и найдите счет рассогласования

Я не знаю, как правильно использовать сравнение строк, я пробовал с for и while петлями с count, но я не знаю.

Моя проблема в этом. Например. Мой пароль: 1234. Мой тест: 1234. В этом случае у меня 4 смерти. Потому что цифры находятся в одном положении. Но в этом случае. Мой пароль: 1234. Мой тест - 1243. У меня 2 смерти, потому что 1 и 2 находятся в правильном положении, но 4 и 3 находятся в другом положении, но они находятся в другой строке. В этом случае у меня 2 смерти и 2 ранения. Извините за мой английский не очень хорошо. Спасибо за помощь ..

enter image description here

+0

Добро пожаловать в SO, добавьте соответствующую часть вашего кода (логику сравнения) здесь. Нажмите «Изменить», добавьте коды, укажите проблемы, с которыми вы сталкиваетесь, и какой результат вы получаете. 'Ctrl + k' будет форматировать часть кода. – Abhineet

+1

Ваш вопрос также не совсем ясен. Готовьте свою цель более четко. –

+2

Пожалуйста, разместите фактический код вместо скриншотов. [См. Здесь] (http://meta.stackoverflow.com/a/285557/1402846). Спасибо. – Pang

ответ

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

Добавление точки в ответ. не нужно использовать для цикла при сравнении, поскольку strncmp принимает строки в качестве входных данных. strncmp delcaration является int strncmp(const char *s1, const char *s2, size_t n);

Смежные вопросы