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。。初学者求解答 展开
程序:
#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。。初学者求解答 展开
展开全部
#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;
}
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;
}
展开全部
这里边为什么要判断字符是不是换行符?
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。
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。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
遇到换行符结束,程序得有结束条件啊,不能无限输入吧;
第二个问题,比方说输入'W','W'+4后不就超'Z'了吗?要减去26才是'A'
第二个问题,比方说输入'W','W'+4后不就超'Z'了吗?要减去26才是'A'
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
getchar()会读取换行符,本题希望一换行符做终止符并且不读取它。
c=c+4语句使得最后c有可能不在正确范围内,c>′Z′ && c<=′Z′+4 || c>′z′是不在正确范围内的判断条件,减去26才能编程A-D或者a-d
c=c+4语句使得最后c有可能不在正确范围内,c>′Z′ && c<=′Z′+4 || c>′z′是不在正确范围内的判断条件,减去26才能编程A-D或者a-d
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、判断字符是不是换行用来表示停止读入输入,你也可以判断其是不是EOF,或其他特定字符
2、你可以把字母直接看成一个个无符号的数值,看ascii码表就清楚了。所以c=c+4后,并不是直接把w~z的字母转换成a~d,而是之后的几个特定字母(印象中好像是什么+-符号之类),所以需要c=c-26来让它变回a~d
2、你可以把字母直接看成一个个无符号的数值,看ascii码表就清楚了。所以c=c+4后,并不是直接把w~z的字母转换成a~d,而是之后的几个特定字母(印象中好像是什么+-符号之类),所以需要c=c-26来让它变回a~d
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询