使用C中的自定义字母解码字符数组

时间:2015-11-26 16:39:18

标签: c

#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是我要解码的单词,同时保持大写和小写字母完整。

预期结果:

ezamasodikkotelezoprogramomamiKODOLesDEKODOL

代码的作用是:

kzsqssudikkutkvkzupwuxwsquqsqiKUDUVksDKKUDUV

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您的循环顺序错误。你循环通过字母表,在循环内循环你。想想会发生什么。

一个例子:

让我们说转换是

  

A-&GT;乙
  B-&以及c

您输入字词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++){

如果其中任何一个条件适合,你也可以打破循环,因为之后不会成为另一个合适的条件。