Vc++题目,急求解答!谢谢!

题目:每个汉字码占用两个字节,且每一字节的值均大于127,若通过交换这两个字节的前后顺序则可对汉字进行简单加密和解密。是设计一个程序,输入一个中英文字符串,先对该字符串加... 题目:每个汉字码占用两个字节,且每一字节的值均大于127,若通过交换这两个字节的前后顺序则可对汉字进行简单加密和解密。是设计一个程序,输入一个中英文字符串,先对该字符串加密并显示加密后的效果,然后解密并显示解密后的效果(解密后的效果应与输入的字符串相同)。

我自己写了个程序,没错但运行得不对。谁能帮我看一下吗?还有,有不同程序的,可以把程序写下来。谢谢了!
#include<iostream.h>
#include<string.h>
void encrypt(char[],int);
void main()
{
char text[1024];
cout<<"输入明文:";
cin.getline(text,1024);
int len=strlen(text);
encrypt(text,1024);
cout<<"密文为:"<<text<<endl;
encrypt(text,len);
cout<<"解密后为:"<<text<<endl;

}
void encrypt(char str[],int size)
{
int t;
for(int i=0;i<size;i++)
if(str[i]%2==0)
{
t=str[i];
str[i]=str[i+1];
str[i+1]=str[i];
}
else
str[i]=str[i];

}
展开
 我来答
HoboSoft
2012-04-03 · TA获得超过162个赞
知道小有建树答主
回答量:292
采纳率:0%
帮助的人:301万
展开全部
你的程序是存在较为严重的逻辑问题的,在多字节编码的程序中,汉字是两个字节,可英文字母和数字等都是单字节,你的程序中并没有对是否是汉字进行判断。另外你的代码中已经执行了str[i] = str[i+1];再执行str[i+1]=str[i];则结果就是新的str[i]和str[i+1]都赋值成了原有字符串中str[i+1]的值,自然就不正确了。想要实现交换非常简单。
另外还需要判断数组的越界操作的问题。
判断语句改为:
if (i%2==0 && i < size-1)
{
char t=str[i];
str[i]=str[i+1];
str[i+1] = t;
}
追问
判断语句改为:
if (i%2==0 )
{
char t=str[i];
str[i]=str[i+1];
str[i+1] = t;
}
else
str[i]=str[i];
改成这样貌似是对的。因为我之前已经写了for(int i=0;i<size;i++)
有了范围。谢谢你的回答!我找到答案了,谢谢!O(∩_∩)O~
007远方更远
2012-04-03
知道答主
回答量:12
采纳率:0%
帮助的人:15.7万
展开全部
加密部分实现错了,调换一个汉字的前后两字节需要用到指针操作.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式