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

标签 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

我做错了什么?

最佳答案

你的循环顺序错误。您循环遍历字母表,并在该循环内循环遍历单词。想想会发生什么。

一个例子:

假设转换是

A->B
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++){

如果其中一个条件满足,您也可以中断循环,因为之后不会有另一个合适的条件。

关于c - 使用 C 中的自定义字母解码字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33943473/

相关文章:

c++ - 缺失项目最终数组列表

c - fallocate 和 ftruncate 有什么区别

c - PLL 寄存器配置生成中断 (ARM)

c - 停在文件末尾

c - 迭代矩阵中的不同对角线并在 C 中建立其起点和终点?

mysql - 准备好的 SELECT 语句执行但始终返回 0 行

python - 如何找到有关文件描述符的更多信息?

c - 查看我的程序的输出

c - 汇编语言中的斐波那契数列

c - 如何在 printf 中处理 '\0'?