|
|
发表于 2013-9-10 11:29:48
|
显示全部楼层
1.
if((c>='a' && c<='z') || (c>='A' && c<='Z'))
{
c=c+4;
if(c>='Z' && c<='Z'+4 || c>'z')
c=c-26;
}
很简单啊,第一个if,是判断c是否为大小写字母,如果为,就c=c+4;这个时候,c已经+4了。
第二个if,if(c>='Z' && c<='Z'+4 || c>'z') ,主要的作用是如果你输入的是WXYZ,+4,不就跑到如右这个ASCII码去了-->[ \ ] ^,
所以必须让c=c-26; ,[其实这句c>='Z' && c<='Z'+4 || c>'z'已经错了,如果你输入的是大写V,就会变成乱码]
---->要改成c>'Z' && c<='Z'+4 || c>'z',为什么这样,就不解释了,太简单了。
打个比方吧:你如果输入的是字符X,在计算机里,用10进制表示,就是88,那通过第一个IF后,c=92,那就变成了字符'\',而不是你想要的字符B,这个时候,就必须用第二个IF,来判断输入的是否是后面四个字母WXYZ,如果是再减去26,因为ascii码里,A为65,后面字母递增而来。至于c>'z',为什么不要c<='z'+4 那是因为基本的ASCII码总共只有128位[0-127],而这上z,是122,加不加都没有关系,因为第一个if后,c=c+4,那就是说小写的'z',已经到126位,第127位是DEL,所以可以直接用c>'z',只要大于'z',就直接c=c-26;就可以跑到a去了,和大写原理一样。
|
|