【发布时间】:2015-05-03 09:04:57
【问题描述】:
我正在用 C 编程语言编写一个代码,它接收一个字符串(字符)作为输入,每个字母在字母表中前进 3。例如。如果用户键入“abc”,程序应该返回“def”。问题是,如果用户键入“z”(例如),程序会返回一些字符,而不是我的目标(在这种情况下是字母“c”)。我当前的算法包括这个 if 语句:
if ((text[i]>='a' && text[i]<='w')||(text[i]>='A' && text[i]<='W'))
text[i] = (text[i]) + 3;
但这迫使我写下所有这些行:
else if (text[i]=='x') text[i]='a';
else if (text[i]=='X') text[i]='A';
else if (text[i]=='y') text[i]='b';
else if (text[i]=='Y') text[i]='B';
else if (text[i]=='z') text[i]='c';
else if (text[i]=='Z') text[i]='C';
如何优化我的代码?
【问题讨论】:
-
听起来你需要
%(模数/余数)。 -
@JoachimPileborg,问题是当程序尝试转换一些 x、y 或 z 时,他返回下一个 ASCII 码的下一个字符,而不是像我希望的那样从字母表重新开始...这意味着如果我输入 z 他可能会返回一些标点符号或其他符号...
-
@EOF ,我该如何使用 % ?
-
对于大写 ASCII:
newchar = 'A'+((oldchar-'A'+offset)%(number_of_capital_chars));。offset在你的情况下是 3。 -
或一对加倍的字母数组,如果出于某种原因您不喜欢模运算符。除了一堆单值 if-else-if 之外,还有很多方法可以做到这一点。