操纵字符阵列

时间:2015-05-02 22:48:57

标签: c arrays

我用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';

如何优化代码?

1 个答案:

答案 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