作业帮 > 综合 > 作业

for(i=0;a[i]!='\0';i++) { b[i]=(a[i]-'a'+K)%26+'a'; }

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/06/05 06:17:46
for(i=0;a[i]!='\0';i++) { b[i]=(a[i]-'a'+K)%26+'a'; }
凯撒密码的部分,请详解下for语句里头每一步的意思~
for(i=0;a[i]!='\0';i++) { b[i]=(a[i]-'a'+K)%26+'a'; }
a[i]是一个字符数组.K是一个变量,也可能是预先定义好的常变量,就是说b[i](应该是输出字符串 ) 的字符是在既定的a[i]的基础上偏移一个数值.例如K=1,那么,b[i]=a[i]+1,就是如果a[1]='a',那么b[1]='b',如果a[1]='z',则a[1]='a';如此类推,同理,如果K=2,则如果a[1]='a',那么b[1]='c',如果a[1]='z',则a[1]='b';如此类推 .a[i]-'a'就是获得a[i]的在26字母表中的位置,中间主要执行的是%26,也就是模26运算,此运算是防止超出范围的限制,因为如果a[i]='z',k=1,那么(a[i]-'a'+K)+'a'= 'z'+1,超出字母表范围.
再问: a,b分别都是字符串数组,我就是不懂为什么数组a[]可以减去'a'以及数字k,是c中规定的么,字母减去'a'为取地址,减数字为移位,是规定?那+‘a'与-'a'的分别?
再答: 不是,c或者c++中,字符,相当于一个无符号整数,可以与其他数字进行加减运算,乘除运算意义不大,你可以试一下,int i=‘a’,cout