嘴角长瘊子怎么去掉:悬赏高手,急~急~急~

来源:百度文库 编辑:高考问答 时间:2024/05/08 05:15:53
有一行电文,以按下面规律译成密码:

A-Z a-z

B-Y b-y

C-X c-x

. .

. .

. .

即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母。非字母字符不变。

要求编程序将密码译回原文,并输出密码和原文。

程序如下:

#include <stdio.h>
int main()
{
FILE *f1;
f1=fopen("h2.in","r");
int n;
fscanf(f1,"%d",&n);
char data1[n];
char data2[n];
for(int i=0;i<n;i++)fscanf(f1,"%c",&data1[i]);
for(int i=0;i<n;i++)
{
int k=0;
char a1=data1[i];
if(a1>=65&&a1<=90)data2[i]=155-a1;k+=1;
if(a1>=97&&a1<=122)data2[i]=219-a1;k+=1;
if(k==1)data2[i]=a1;
}
f1=fopen("h2.out","w");
for(int i=0;i<n;i++)fprintf(f1,"%c",data2[i]);
fprintf(f1,"\n");
for(int i=0;i<n;i++)fprintf(f1,"%c",data1[i]);
fprintf(f1,"\n");
fclose(f1);
return 0;
}

可是怎么处理“非字母字符不变。”呢???

如果用C语言的话,你可以用一个if语句利用编码进行判断。字母的编码是哪个去见我忘了,但是在任何一本书上都有介绍的。附录里面。比如我们的课本谭浩强的书

判断字符的ASC码就可以了,A~Z的ASC码为65~90;a~z的ASC码为97~122。

很简单,下面是我用java的实现:
/**
* 解码
* @author Einstein
* @date 2006-01-22
* QQ:82870163
*/
package myJava;

public class Decode
{
Decode(){}

public String decode(String source)
{
if(source==null||source.equals(""))return "";
char[] ch1=source.toCharArray();
for(int i=0;i<ch1.length;i++)
{
if(ch1[i]>64&&ch1[i]<91)ch1[i]=(char)(155-ch1[i]);
else if(ch1[i]>96&&ch1[i]<123)ch1[i]=(char)(219-ch1[i]);

}
return new String(ch1);
}

public static void main(String[] arg)
{
Decode dc=new Decode();
System.out.println(dc.decode("ABCDEFGXYZabc==="));
}
}

/*我用c++做的,很简单,要是想更换密钥只用更改c1,c2的内容就行,ci为输入明文
@written by cxz
@date 2006-1-22
@qq:81498172
@e_mail:dodocome@163.com
*/

#include <iostream.h>

void main()
{
char c1[27]="zyxwvutsrqponmlkjihgfedcba",c2[27]="ZYXWVUTSRQPONMLKJIHGFEDCBA",ci[500]="This is a program.",*t;
//ci为输入的明文
t=ci;
while(*t!='\0')
{if((*t)>='a'&&(*t)<='z')
cout<<c1[*t-'a'];
else if ((*t)>='A'&&(*t)<='Z')
cout<<c2[*t-'A'];
else
cout<<*t;
t++;}
}

头疼~