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];
} 展开
我自己写了个程序,没错但运行得不对。谁能帮我看一下吗?还有,有不同程序的,可以把程序写下来。谢谢了!
#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];
} 展开
2个回答
展开全部
你的程序是存在较为严重的逻辑问题的,在多字节编码的程序中,汉字是两个字节,可英文字母和数字等都是单字节,你的程序中并没有对是否是汉字进行判断。另外你的代码中已经执行了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 && 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~
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询