#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。
因此,更改 j
和 i
循环,看看会发生什么。
for(j=0;szoveg[j]!='\0';j++){
for(i=0;kulcs[i]!='\0';i++){
如果其中一个条件满足,您也可以中断循环,因为之后不会有另一个合适的条件。
关于c - 使用 C 中的自定义字母解码字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33943473/