2015-11-26 42 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->ç

您輸入的單詞ABC

你的代碼開始循環通過轉變。首先它檢查所有A,並將它們更改爲B,所以你得到BBC。然後它檢查所有B並將它們轉換爲C,所以你得到CCC。

你應該做的是循環輸入並檢查哪個變換適合。在這個例子中,你首先得到A,檢查是否有變換A-> B,所以這變成B.你的輸出只是B.然後有一個B,它必須變成C,所以你現在有BC。然後是C,沒有變換,所以它是BCC。

因此,請更改ji循環,看看會發生什麼情況。

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

如果任一條件合適,您也可以打破循環,因爲之後不會有其他合適的條件。

+0

感謝您的幫助!解決了。 – Chris

+1

因此,您應該將答案標記爲已接受。 –

+0

對不起,這裏有新內容 – Chris