#includestdio.h
int main()
{
char a[100],d[100];
int i,j=0;
printf("输入要翻译的密码,以“@”结束:\n");
scanf("%s",a);
for(i=0;a[i]!='@';i++)
{
if((a[i]='a'a[i]='z')||(a[i]='A'a[i]='Z'))
{
if(a[i]='a'a[i]'x')
a[i]=a[i]+3;//直接加减相差的位数
else if(a[i]='A'a[i]'X')
{
a[i]=a[i]+3;//先转化成加三位的大写,再转化成小写
a[i]=a[i]+32;//大小写相差32位
}
else if(a[i] = 'X'a[i] = 'Z')//X、Y、Z都应该做处理
a[i]=a[i]+9;
else if(a[i]='x')//x、y、z都应该做处理
a[i] -= 23;
}
d[i]=a[i];
j++;//统计字符的个数,以免后面的输出中有乱码
}
printf("密码的译文是:\n");
for(i=0;i=j;i++)
printf("%c",d[i]);
printf("\n");
return 0;
}这样修改之后应该就好了,根据题目要求,我觉得x、y、z的大小写都应该特殊处理,那个加减的数字是根据ASCII码计算出来的
#includestdio.h
#includeconio.h
#includemath.h
main()
{
char a;
char b;
printf("请按下空格进入原文转译密码,按下回车进入密码转译原文,按下ESC则退出\n");
a='\0';
a=getch();
if(a==32)
{
printf("此项功能为原文译为密码~请输入你需要转译的...\n");
scanf("%c",b);
if(b=65b=90)
{
if(b=87)
{
b=b-26;
}
b=b+4;
printf("%c\n",b);
}
if(b=97b=122)
{
if(b=119)
{
b=b-26;
}
b=b+4;
printf("%c\n",b);
}
}
if(a==13)
{
printf("此项功能为密码译为原文~请输入你需要转译的密码...\n");
scanf("%c",b);
if(b=65b=90)
{
if(b=68)
{
b=b+26;
}
b=b-4;
printf("%c\n",b);
}
if(b=97b=122)
{
if(b=100)
{
b=b+26;
}
b=b-4;
printf("%c\n",b);
}
}
if(a==27)
{
printf("结束流程...\n");
return 0;
}
printf("程序结束...\n");
}
#includestdio.h
main()
{
char s[30];
int i=0;
gets(s);
while(s[i]!='\0')
{
if(s[i]='a's[i]='v'||s[i]='A's[i]='V')
s[i]+=4;
else if(s[i]='w's[i]='z')
s[i]=('a'-1)+4-('z'-s[i]);
else
{
if(s[i]='W's[i]='Z')
s[i]=('A'-1)+4-('Z'-s[i]);
}
i++;
}
puts(s);
//system("pause");
return 0;
}
main()
{
char *str="aabbcc112546XXXyyyzzz";//密码
printf("密码:%s\n",str);
//解密
printf("原文:");
int i=0;
while(str[i]!='\0')
{
if(str[i]64str[i]91)
{
printf("%c",(26-(str[i]-64)+1)+64);
i++;
continue;
}
if(str[i]96str[i]123)
{
printf("%c",(26-(str[i]-96)+1)+96);
i++;
continue;
}
printf("%c",str[i]);
i++;
}
printf("\n");
}
#includestdio.h
#includestring.h
void main()
{
int c,i,S,C,char ch[];
c=getchar(); //获得输入的字符赋值给c变量
printf("请输入电文:");
scanf("%s",ch); //键盘输入字符串保存到ch中
S=strlen(ch); //计算ch的长度保存到s中
For (i=1;is;i++) //循环s次
{
C=(c='A'c='Z')||(c='a'c='z')?(26-i+1):c;
//首先,(c='A'c='Z')||(c='a'c='z')为判断条件,
判断当输入的字符为a-z和A-Z之间的字母时,整个
(c='A'c='Z')||(c='a'c='z')算式值为1,输入非字母值为0.
为1,则将(26-i+1)的值赋给C,否则将c直接赋给C
Printf("%c",C); 然后以字符形式输出c 。
}
}
我没有看到你写的代码哪里有把A-Z 翻译成a-z哦 ,
是我理解题目错误?说实话,我现在还是看不明白题目所谓的翻译规律是什么规律。。
是A翻译为Z 还是说就是大写转小写。
看你的代码应该是想实现大转小,还少加一条判断,
判断如果是大写,就要减32然后输出(ascii 码)
还有好多未定义的变量,大小写也不区分,不知是输入错误,还是初学不去注意那些细节。
反正c语言必须要区分大小写的,否则你上面那段代码有严重问题。
代码至少先得自己看懂,何况写了。没必要非用那些++,--,?:那些表达式,
华而不实。是可以提高一点可怜的执行效率,但可以后续优化,首先必须得保证思路清晰。
很喜欢编程或打算走这条路的话,就不能局限于书本了~要多找代码去阅读
先在这里祝君好运
a b c d e f g h i j
例子里输入ab,cd
a是第1个字符,那么换成a后面第1个,也就是b
b是第2个字符,那么换成b后面第2个,也就是d
到这里都没错
c是第4个字符,那么换成后面第4个,也就是g,为什么题目示例是h???
#include stdio.h
#include ctype.h
int main()
{
int i=0;
char str[1001];
fgets(str,1000,stdin);
while(str[i]){
if(islower(str[i]))
str[i]=97+(str[i]+i-96)%26;
else if(isupper(str[i]))
str[i]=65+(str[i]+i-64)%26;
i++;
}
puts(str);
return 0;
}