我用C编程语言编写代码,接收字符串(字符串)作为输入,每个字母在字母表中前进3。例如。如果用户输入" abc",程序应返回" def"。问题是,如果用户键入' z' (例如),程序返回一些char,而不是我的目标(在这种情况下是字母' 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';
如何优化代码?
答案 0 :(得分:1)
您的问题可以通过简单的算术逻辑来解决。 char的范围从0到255.每个值对应一个单独的字符。字母'A-Z'和'a-z'的范围分别为65-90和97-122。所以对于你的问题,有两个范围。您可以使用标准库函数检查您的角色是大写还是小写范围。然后你可以设置你的范围的基数。接下来,您将找到角色与基础的偏移量,在其中添加3。可以使用%运算符将新值设置为循环。每个范围最多包含26个字符,因此您可以通过从26获取模数使您的范围变为圆形。现在将结果值(偏移)添加到基数以获得所需的字符。
#include <ctype.h>
...
...
...
char c = text[i];
char base = isupper(c)? 'A' : 'a';
text[i] = base + (((c - base) + 3) % 26); // New Desired Character