Как я могу сравнить два массива, которые имеют разные размеры? - PullRequest
0 голосов
/ 21 мая 2019

Мне нужно сравнить элементы массива из файла с файлом данного массива, чтобы заменить их значениями из третьего массива, которые соответствуют второму массиву.

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

int decrypt(char *letters,char *array1,char *array2,int count)
{
    int i,j;
    for(i=0;i<count;i++)
    {
        for(j=0;j<28;j++)
        {
            if(*(letters+i)== *(array1+j))
            {
                *(letters+i)= *(array2+j);
            }
        }
    }

    printf("The decrypted message is: %s\n",letters);
}

1 Ответ

0 голосов
/ 21 мая 2019

Вы должны break; из внутреннего цикла после того, как совпадение найдено, иначе буква может быть заменена снова.Предположим, что декодирующие массивы имеют вид

char array1[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ .";
char array2[] = " .QWERTYUIOPASDFGHJKLZXCVBNM";

. Когда декодируется буква 'C', она становится 'Q', но если вы не вырвитесь из внутреннего цикла, 'Q' будет снова декодирован.до 'G'.Я предлагаю

int decrypt(char *letters, char *array1, char *array2, int count)
{
    int i, j;
    for(i = 0; i < count; i++)
    {
        for(j = 0; j < 28; j++)
        {
            if(letters[i] == array1[j])
            {
                letters[i] = array2[j];
                break;                      // added here
            }
        }
    }
    printf("The decrypted message is: %s\n", letters);
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...