#include
<iostream.h>
#define
MAX
1000
//加密
char
*
Encryption(char
*E,int
Key)
{
for(int
i=0*(E+i)i++)
{
*(E+i)
+=
Key
if(*(E+i)>'z')
*(E+i)
-=
('z'-'a')+1
}
return
E
}
//解密
char
*
Decryption(char
*E,int
Key)
{
for(int
i=0*(E+i)i++)
{
*(E+i)
-=
Key
if(*(E+i)<'a')
*(E+i)
+=
('z'-'a')+1
}
return
E
}
void
main()
{
char
a[MAX]
int
key
cout<<"输入字符串:"<<endl
cin
>>
a
cout<<"输入密钥:"<<endl
cin
>>key
cout<<"加密输出:"<<Encryption(a,key)<<endl
cout<<"解密输出:"<<Decryption(a,key)<<endl
}
import java.util.Scannerpublic class Cipher
{
public static void main(String [] args)
{
Scanner kb=new Scanner(System.in)
System.out.println("Please enter a String: ")
String str=kb.nextLine()
System.out.println("Please enter the offset value: ")
int offset=kb.nextInt()
Cipher c = new Cipher() //new个类Cipher的实例
System.out.println(c.encrypt(str, offset)) //执行encrypt()方法,并输出
}
public String encrypt(String str,int offset)
{
String result = str //这里你要再定义一个返回结果的字符串.String.replace()方法只是返回改过后的字符串,并不修改原字符串。
for(int i=0i<str.length()i++)
{
int a=(int)str.charAt(i)+offset
if(a>126)
{
result = str.replace(str.charAt(i),(char)(a-95))
}
else
result = str.replace(str.charAt(i),(char)(a))
}
//return str //永远都是返回原来的字符串
return result
}
}
至于你说的!和?的问题,你应该是直接输出a了,看到的是?,因为a是128,超过了127,所以输出的是?,超过127的都是?,不信你可以试试129等等。但替换字符的时候你用的是a-95,是正确的,用!替换}。
这道题,并不难,只是楼主,没有说清,是就字母移位吗?但是看你的例子,有不全是。
程序如下:
#include <stdio.h>
#include <stdlib.h>
FILE *source//源文件
FILE *destination//目标文件
int key//密钥
char file[100]//文件名
void encryption()//加密
{
char ch
printf("请输入要加密的文件名\n")
scanf("%s",file)
if((source=fopen(file,"r"))==NULL)
{
printf("无法打开文件!\n")
exit(0)
}
printf("请输入加密后的文件名\n")
scanf("%s",file)
if((destination=fopen(file,"w"))==NULL)
{
printf("无法创建文件!\n")
exit(0)
}
printf("请输入密钥\n")
scanf("%d",&key)
ch=fgetc(source)
while(ch!=EOF)
{
if(ch=='\n')
{
fputc(ch,destination)
ch=fgetc(source)
continue
}
ch+=key
fputc(ch,destination)
ch=fgetc(source)
}
fclose(source)
fclose(destination)
}
void decrypt()//解密
{
char ch
printf("请输入要解密的文件名\n")
scanf("%s",file)
if((source=fopen(file,"r"))==NULL)
{
printf("无法打开文件!\n")
exit(0)
}
printf("请输入加密后的文件名\n")
scanf("%s",file)
if((destination=fopen(file,"w"))==NULL)
{
printf("无法创建文件!\n")
exit(0)
}
printf("请输入密钥\n")
scanf("%d",&key)
ch=fgetc(source)
while(ch!=EOF)
{
if(ch=='\n')
{
fputc(ch,destination)
ch=fgetc(source)
continue
}
ch-=key
fputc(ch,destination)
ch=fgetc(source)
}
fclose(source)
fclose(destination)
}
int main()//主函数提供菜单
{
int choice=0
printf("******************\n")
printf("1 文件加密\n")
printf("2 文件解密\n")
printf("3 退出\n")
printf("******************\n")
printf("请输入1 2 3选择 *** 作\n")
scanf("%d",&choice)
switch(choice)
{
case 1:encryption()break
case 2:decrypt()break
case 3:break
}
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)