2015-11-26 1 views
-3
#include<stdio.h> 

int main(){ 

    int i,j; 
    char kulcs[27]="DKVQFIBJWPESCXHTMYAUOLRGZN",kod='D',szoveg[256]="fndcdahqweehufsfnhtyhbydchcdcwEHQHSfaQFEHQHS"; 

    if(kod=='D'){ 
     for(i=0;kulcs[i]!='\0';i++){ 
      for(j=0;szoveg[j]!='\0';j++){ 
       if(kulcs[i]==szoveg[j]){ 
         szoveg[j]=i+65; 
       }else if(kulcs[i]==szoveg[j]-32){ 
         szoveg[j]=i+97; 
       } 
      } 
     } 
     printf("%s\n",szoveg); 
    } 

    return 0; 
} 

kulcs хранит алфавит, szoveg это слово, которое я хочу, чтобы расшифровать, сохраняя при этом верхние и строчные буквы нетронутыми.Декодирование массив символов, используя пользовательский алфавит в C

ожидаемый результат:

ezamasodikkotelezoprogramomamiKODOLesDEKODOL 

что код делает:

kzsqssudikkutkvkzupwuxwsquqsqiKUDUVksDKKUDUV 

Что я сделал не так?

ответ

0

Ваши петли находятся в неправильном порядке. Вы прокручиваете алфавит, и внутри этого цикла вы проходите через слово. Подумайте, что произойдет.

Пример:

Скажем, преобразования

A-> B
B-> C

Вы вводите слово ABC

Ваш код начинает цикл через преобразования. Сначала он проверяет все A и изменяет их на B, поэтому вы получаете BBC. Затем он проверяет все B и преобразует их в C, поэтому вы получаете CCC.

Что вам нужно сделать, это выполнить петлю через вход и проверить, какое преобразование подходит. В этом примере вы сначала получите A, убедитесь, что есть преобразование A-> B, поэтому это становится B. Ваш результат - просто B. Тогда есть B, который должен быть преобразован в C, поэтому у вас есть BC. Тогда C, без преобразования, так что это BCC.

Итак, измените петли j и i и посмотрите, что произойдет.

for(j=0;szoveg[j]!='\0';j++){ 
    for(i=0;kulcs[i]!='\0';i++){ 

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

+0

Спасибо за помощь! Решаемые. – Chris

+1

Итак, вы должны отметить ответ как принятый. –

+0

Извините, новый здесь – Chris

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