c++的问题

题目:为使电文保密,往往按一定规律将电文转换成密码,收报人再按约定的规律将其译回原文。例如,可以按以下规律将电文变成密码:将字母A变成字母E,a变成e,即变成其后的第4个... 题目:为使电文保密,往往按一定规律将电文转换成密码,收报人再按约定的规律将其译回原文。例如,可以按以下规律将电文变成密码:将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成C,Z变成D。见图3.20。字母按上述规律转换,非字母字符不变。

程序:
#include <iostream>
using namespace std;
int main( )
{char c;
while ((c=getchar( ))!=′\n′)
{if((c>=′a′ && c<=′z′) || (c>=′A′ && c<=′Z′))
{c=c+4;
if(c>′Z′ && c<=′Z′+4 || c>′z′) c=c-26;
}
cout<<c;
}
cout<<endl;
return 0;
}

请问大神,这里边为什么要判断字符是不是换行符?而且判断大写字母W-Z的那句程序为什么要写成>=z并且<=z+4啊。他们不是已经变成A-D了么?。A-D的ASCII码不是应该比W-Z小么?为什么最后还要减去26。。初学者求解答
展开
 我来答
terranlong
2013-02-21 · TA获得超过7293个赞
知道大有可为答主
回答量:2660
采纳率:0%
帮助的人:3953万
展开全部
#include <iostream>
using namespace std;
int main( )
{char c;
while ((c=getchar( ))!=′\n′) // while连续接收输入的字符,直到你输入换行,所以以输入'\n'为结束条件
{if((c>=′a′ && c<=′z′) || (c>=′A′ && c<=′Z′)) // 如果输入的是字符,就将其ASCII码+4,也就是向后移4
{c=c+4;
if(c>′Z′ && c<=′Z′+4 || c>′z′) c=c-26; // 如果向后移4后不是一个字符了,也就是超出'z'或'Z'了,就向前移26,由于有26个字母,所以就能将w-z变成a-d
}
cout<<c;
}
cout<<endl;
return 0;
}
kingfeng588
2013-02-21 · TA获得超过2494个赞
知道大有可为答主
回答量:1475
采纳率:50%
帮助的人:1791万
展开全部
这里边为什么要判断字符是不是换行符?
while ((c=getchar( ))!=′\n′)判断换行是为了确认输入字符串是否结束,\n是结束标志,如果结束就退出循环。

而且判断大写字母W-Z的那句程序为什么要写成>=z并且<=z+4啊。
c=c+4;
if(c>′Z′ && c<=′Z′+4 || c>′z′)
这里是已经把字符转换为要输出的字符了,接下来if是为防止字符超出26个字符的范围进行的处理。

他们不是已经变成A-D了么?。 是的。

A-D的ASCII码不是应该比W-Z小么? 是的。

为什么最后还要减去26。
if(c>′Z′ && c<=′Z′+4 || c>′z′) c=c-26;这里为防止字符超出26个字符的范围进行的处理。
比如输入:Z,那么要变成D,而
c=c+4;这里使得Z加4后超出了26个字母范围。
if(c>′Z′ && c<=′Z′+4 || c>′z′)判断是否超出26个字母范围
c=c-26;超出的话,要减去26,才能得到真正的字符D。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
huangzhenbc
2013-02-21 · 超过25用户采纳过TA的回答
知道答主
回答量:68
采纳率:0%
帮助的人:65.3万
展开全部
遇到换行符结束,程序得有结束条件啊,不能无限输入吧;
第二个问题,比方说输入'W','W'+4后不就超'Z'了吗?要减去26才是'A'
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
岁月哪曾斑驳
2013-02-21 · TA获得超过742个赞
知道小有建树答主
回答量:278
采纳率:50%
帮助的人:349万
展开全部
getchar()会读取换行符,本题希望一换行符做终止符并且不读取它。

c=c+4语句使得最后c有可能不在正确范围内,c>′Z′ && c<=′Z′+4 || c>′z′是不在正确范围内的判断条件,减去26才能编程A-D或者a-d
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
402407
2013-02-21 · TA获得超过771个赞
知道小有建树答主
回答量:726
采纳率:50%
帮助的人:899万
展开全部
1、判断字符是不是换行用来表示停止读入输入,你也可以判断其是不是EOF,或其他特定字符
2、你可以把字母直接看成一个个无符号的数值,看ascii码表就清楚了。所以c=c+4后,并不是直接把w~z的字母转换成a~d,而是之后的几个特定字母(印象中好像是什么+-符号之类),所以需要c=c-26来让它变回a~d
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式