C++ 解码程序怪事

来源:百度知道 编辑:UC知道 时间:2024/06/14 05:25:59
题目:
编写一个加密程序,用来加密一个字符串。加密规则如下:
1. 把字符串中的所有数字0、1 … 9分别换成小写英文字母a、b … j。
2. 把字符串中的所有小写英文字母a、b … j分别换成数字0、1 … 9。
3. 其它字符保持不变。
#include <iostream>
using namespace std;
int main()
{
int i;
//int z=1;
char *s,str[100];
while(cin>>str)
{
s=str;
i=0;
while(*(s+i)!='\n')
{
if(*(s+i)=='a') {*(s+i)='0';}
else if(*(s+i)=='b') {*(s+i)='1';}
else if(*(s+i)=='c') {*(s+i)='2';}
else if(*(s+i)=='d') {*(s+i)='3';}
else if(*(s+i)=='e') {*(s+i)='4';}
else if(*(s+i)=='f') {*(s+i)='5';}
else if(*(s+i)=='g') {*(s+i)='6';}
else if(*(s+i)=='h') {*(s+i)='7';}
else if(*(s+i)=='i') {*(s+i)='8';}
else if(*(s+i)=='j') {*(s+i)='9';}
else if(*(s+i)==&

cin输入的字符串并不是以'\n'结束
而是以'\0'结束的

字符串里并没有'\n',所以你的循环就一直不会结束,最终导致溢出

解决方法
把你的
while(*(s+i)!='\n')
改成
while(*(s+i)!='\0')

'0'的ascii码是48,'a'是97
'0'+49='a'
'1'+49='b'
..
'9'+49='j'

反过来'0'='a'-49
所以没必要做那么多判断的
在'0'-'9'之间的话,加上49就变成密码
在'a'-'j'之间的话,减去49就变成密码

char buffer[256];
gets(buffer); //用gets的好处是输入的时候可以包含空格,一直读到回车为止
int len=strlen(buffer);
printf("加密前:%s\n",buffer);
int i=0;
for(i=0;i<len;i++)
if(buffer[i]>='0' && buffer[i]<='9')
buffer[i]+=49;
else if(buffer[i]>='a' && buffer[i]<='j')
buffer[i]-=49;
printf("加密后:%s\n",buffer);

呵呵,典型的输入模式错误。

应该这样