(C)在ASCII图表中向前移动x次数但仍保持在a-z之间的最佳方法?
基本上你先输入一个单词,然后输入一个数字。该程序采用ASCII格式的每个字符并前进一步。例如,“hello”和数字1返回“ifmmp”。 现在,如果我输入一个大于字符和数字的ASCII值的数字,我将得到非a-z的字符。为了保持a-z,我做了一个while循环,我的问题是: 如果输入~5000的值,是否可以在不循环5000次的情况下执行此操作 (单词、数字、答案和x在前面声明)(C)在ASCII图表中向前移动x次数但仍保持在a-z之间的最佳方法?,c,while-loop,ascii,C,While Loop,Ascii,基本上你先输入一个单词,然后输入一个数字。该程序采用ASCII格式的每个字符并前进一步。例如,“hello”和数字1返回“ifmmp”。 现在,如果我输入一个大于字符和数字的ASCII值的数字,我将得到非a-z的字符。为了保持a-z,我做了一个while循环,我的问题是: 如果输入~5000的值,是否可以在不循环5000次的情况下执行此操作 (单词、数字、答案和x在前面声明) 使用循环将每个值递增一并不是您想要的…您需要一个累加,然后是一个概括(如果需要概括的话) 首先要做的是将大的数减少到最小
使用循环将每个值递增一并不是您想要的…您需要一个累加,然后是一个概括(如果需要概括的话) 首先要做的是将大的数减少到最小的数,这样仍然可以得到相同的结果。因为在换行之前只有26个值,所以您可以简单地设置
number=number%26代码>或者更一般地说,number=number%(1+'z'-'a')代码>
其次,做积累<代码>答案[x]=单词[x]+数字代码>
最后处理环绕:if([answer[x]>'z')answer[x]=answer[x]+'a'-'z';
噢,天哪
首先,唯一重要的数字是0..25;其他任何数字都会在整个字母表中产生额外的循环。因此,首先用数字%26替换数字
但这表明您可以完全消除循环。如果所讨论的ASCII码是0..25,那么您可以将ASCII码x替换为(x+数字)%26.相反,通过减去a的ASCII码,将x映射到该范围,执行刚才描述的数学运算,然后将该码加回去。修改字符,使ASCII字符“a”为零,加上值,然后生成%26
就像这样:
answer[x] = (word[x]-'a'+number)%26+'a';
非常感谢!之前已经算出了数学,但不知道如何在代码中完成。不知道v1%v2除以并返回余数
为答案欢呼:)你知道a是什么吗?(字母-'a'+数字)%('z'+1-'a')+'a'
@zch:我想你的意思是('z'-'a'+1)@ScottHunter,对,经典的篱笆柱错误。但是现在答案[x]可能是0,这不是所需的ASCII码之一。
answer[x] = (word[x]-'a'+number)%26+'a';