《C程序设计教程(第四版)——谭浩强》
题目:
例题4.11 译密码。为使电文保密,往往按一定规律将其转换为密码,收报人再按约定的规律将其译回原文。
例如,可以按以下规律将电文变为密码:
将字母A变成字母E,a变为e,即变成其后的第4个字母,W变为A,X变为B,Z变为D
代码:
//《C程序设计教程(第四版)——谭浩强》
//例题4.11 译密码。为使电文保密,往往按一定规律将其转换为密码,收报人再按约定的规律将其译回原文。
//例如,可以按以下规律将电文变为密码:
//将字母A变成字母E,a变为e,即变成其后的第4个字母,W变为A,X变为B,Z变为D#include <stdio.h>
#include <stdlib.h>int bianyi(char arr1[]);//将密码编译为原文int main()
{char arr[100];//充足的原文空间int size=0;int panduan=0;char arr1[]={};char arr1_1[]={};int ch='a';printf("请输入你的编译原文:\n");scanf("%99s",&arr);// 限制输入字符的数量,防止溢出,最多99个字符 + '\0'// printf("%s\n",arr);size=sizeof(arr)/sizeof(arr[0]);
// printf("%d\n",size);int i=0;for(i=0;i<=size;i++){if(arr[i]=='\0'){break;}if((arr[i]>=65 && arr[i]<=90)||(arr[i]>=97 && arr[i]<=122)){panduan=1;if((arr[i]>=65 && arr[i]<=86)||(arr[i]>=97 && arr[i]<=118)){arr1[i]=arr[i]+4;}else{if(arr[i]>=87 && arr[i]<=90){arr1_1[i]=90-arr[i]-3;arr1[i]=65+abs(arr1_1[i]);}else{arr1_1[i]=122-arr[i]-3;arr1[i]=97+abs(arr1_1[i]);}}}else{panduan=0;break;}}//判断密码是否接受,是否无效,当panduan为1时,接受密码;当panduan为0时,输出无效!!! if(panduan==1){printf("将译文转化为密码的内容是:%s\n",arr1);}else{printf("!!!您的原文输入无效,请重新输入!!!\n");}printf("\n");printf("**********************************************\n");printf("你是否为收报人,是否想对接受到的密码进行编译!\n");printf("********************注意**********************\n");printf("******编译请按y键,不想编译为原文请按n键******\n");printf("**********************************************\n");printf("\n");getchar();ch=getchar();if(ch=='y'){printf("编译的原文:\n");bianyi(arr1);}else{printf("结束程序\n");}return 0;
}int bianyi(char arr1[])//将密码编译为原文
{int panduan1=0;
// char arr1_2[];
// printf("%s",arr1);int j=0;for(j=0;j<=100;j++){if(arr1[j]=='\0'){break;}if((arr1[j]>=65 && arr1[j]<=90)||(arr1[j]>=97 && arr1[j]<=122)){panduan1=1;if((arr1[j]>=69 && arr1[j]<=90)||(arr1[j]>=101 && arr1[j]<=122)){arr1[j]=arr1[j]-4;}else{if(arr1[j]>=65 && arr1[j]<=68){arr1[j]=arr1[j]+22;}else{arr1[j]=arr1[j]+22;}}}}//判断密码是否接受,是否无效,当panduan1为1时,接受密码;当panduan1为0时,输出无效!!! if(panduan1==1){printf("将译文重新转化为密码:%s\n",arr1);}return 0;
}
运行结果:
编写代码中遇到的问题:
数组名本身就是地址,不需要使用取地址符&。
【错误做法】
【正确做法】