#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
我做错了什么?
答案 0 :(得分:0)
您的循环顺序错误。你循环通过字母表,在循环内循环你。想想会发生什么。
一个例子:
让我们说转换是
A-&GT;乙
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++){
如果其中任何一个条件适合,你也可以打破循环,因为之后不会成为另一个合适的条件。