Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(C)在ASCII图表中向前移动x次数但仍保持在a-z之间的最佳方法?_C_While Loop_Ascii - Fatal编程技术网

(C)在ASCII图表中向前移动x次数但仍保持在a-z之间的最佳方法?

(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在前面声明) 使用循环将每个值递增一并不是您想要的…您需要一个累加,然后是一个概括(如果需要概括的话) 首先要做的是将大的数减少到最小

基本上你先输入一个单词,然后输入一个数字。该程序采用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';