黑马程序员技术交流社区
标题:
英文句子加密的那道题,每个字母用其后3个字母代替
[打印本页]
作者:
胡铭
时间:
2014-4-28 20:16
标题:
英文句子加密的那道题,每个字母用其后3个字母代替
感觉我写的有点麻烦,有更简单的方法吗?
#include"stdio.h"
#include"string.h"
char function(char str[]);
int main()
{
char s[100];
int len,i,j;
scanf("%s",s);
len = strlen(s);
for(i=0;i<len;i++)
{
if(s[i]>='a' && s[i]<='w')
{
len+=2;
for(j=len;j>i+2;j--)
s[j]=s[j-2];
s[i]=s[i]+1;
s[i+1]=s[i]+1;
s[i+2]=s[i]+2;
i+=3;
}
else if(s[i]>='x' && s[i]<='z')
{
len+=2;
for(j=len;j>i+2;j--)
s[j]=s[j-2];
if(s[i]=='x')
{
s[i]='y';
s[i+1]='z';
s[i+2]='a';
}
else if(s[i]=='y')
{
s[i]='z';
s[i+1]='a';
s[i+2]='b';
}
else if(s[i]=='z')
{
s[i]='a';
s[i+1]='b';
s[i+2]='c';
}
i+=3;
}
else if(s[i]>='A' && s[i]<='W')
{
len+=2;
for(j=len;j>i+2;j--)
s[j]=s[j-2];
s[i]=s[i]+1;
s[i+1]=s[i]+1;
s[i+2]=s[i]+2;
i+=3;
}
else if(s[i]>='X' && s[i]<='Z')
{
len+=2;
for(j=len;j>i+2;j--)
s[j]=s[j-2];
if(s[i]=='X')
{
s[i]='Y';
s[i+1]='Z';
s[i+2]='A';
}
else if(s[i]=='Y')
{
s[i]='Z';
s[i+1]='A';
s[i+2]='B';
}
else if(s[i]=='Z')
{
s[i]='A';
s[i+1]='B';
s[i+2]='C';
}
i+=3;
}
}
printf("%s\n",s);
}
复制代码
作者:
魅影穿眸
时间:
2014-4-28 20:33
#include<stdio.h>
#include<stdlib.h>
main()
{
char ch;
printf("Please input a word:\n");
scanf("%c",&ch);
while(ch != 13)
{
if(('a' <= ch <= 'w')||('A' <= ch <= 'W'))
{
ch = ch + 3;
printf("%c",ch);
}
else
{
ch = ch - 23;
printf("%c",ch);
}
scanf("%c",&ch);
}
return 0;
}
作者:
执着的土豆
时间:
2014-4-28 20:47
我提供我写的,楼上得我看了一下,好像是字符加密,并不是句子加密。
//
// main.c
// 测试题7
//
/*
编程实现对键盘输入的英文名句子进行加密。用加密方法为:当内容为英文字母时,用26字母中的其后三个字母代替该字母,若为其它字符时不变。比如245a95n加密后是245bcd95opq。(C语言)
----- 针对此题,26个字母中最后三个字母做了处理,使到z之后从a开始填补
*/
#include <stdio.h> //调用printf需要引用的头文件
int main()
{
int k;
while (k!=0)//定义k判断何时退出程序,用来实现加密多个句子
{
char str1[20],str2[50];
int i,j,n=0;
printf("请输入你想加密的字符串:\n");
scanf("%s",str1);
for(i=0;str1[i]!='\0';++i)
{
if((str1[i]>='A'&&str1[i]<='W')||(str1[i]>='a'&&str1[i]<='w'))
for(j=1;j<4;++j,++n)
str2[n]=str1[i]+j;
else if((str1[i]>='X'&&str1[i]<='Z')||(str1[i]>='x'&&str1[i]<='z'))
switch(str1[i]){
case 'x':str2[n++]='y';str2[n++]='z';str2[n++]='a';break;
case 'y':str2[n++]='z';str2[n++]='a';str2[n++]='b';break;
case 'z':str2[n++]='a';str2[n++]='b';str2[n++]='c';break;
case 'X':str2[n++]='Y';str2[n++]='Z';str2[n++]='A';break;
case 'Y':str2[n++]='Z';str2[n++]='A';str2[n++]='B';break;
case 'Z':str2[n++]='A';str2[n++]='B';str2[n++]='C';break;
}
else
{
str2[n]=str1[i];
++n;
}
}
str2[n]='\0';
printf("%s\n",str2);
printf("是否继续?继续请按( 0 ),退出请按其他键:");
scanf("%d",&k);
}
return 0;
}
复制代码
作者:
戴文婷
时间:
2014-4-28 21:29
本帖最后由 戴文婷 于 2014-4-28 21:31 编辑
/*
函数功能:根据传入的字符,产生一个加密字符串
*/
void makeJiaMiTempString(char c,char *temp){
// 初始化一个char型变量,作为基准数,来防止输入的字符为z这类末尾数时,加密字符串溢出产生乱码
char baseCode='a';
// 当传入值为小写时,基准数为‘a’,当传入值为大写时,基准数为'A'
if(c>='A'&&c<='Z'){
baseCode='A';
}
/*
(c-baseCode) ->找到传入字符是,a-z或A-Z中的第几个字母。
(第n个字母+n)%26 -如果+n后溢出,则%26防止溢出。
最后加基准数,恢复asc编码
*/
char s[]={ (char)((c-baseCode+1)%26+baseCode),
(char)((c-baseCode+2)%26+baseCode),
(char)((c-baseCode+3)%26+baseCode),'\0'};
strcpy(temp, s);
}
复制代码
觉得好的帮忙点个支持~~给点鼓励~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2