以“偏移量”移动的字母表在圆周方向

问题描述

嗨,我不知道如何解决这个问题。当超过 z 或放置超过 a 的负偏移量时,我遇到了“循环”问题。我想我必须重新考虑整个程序。对不起我的英语,我希望你能帮助我或指导我 :)

**编写一个 C++ 程序(只有 if 和 else)来编码一个字母。编码包括返回偏移到输入字母右侧或左侧的字母表中的字母。当偏移值为正时,给出右侧的位置。另一方面,如果偏移值为负,则偏移将向左。偏移值为 0 被视为无效。

  • 在正确的路径中,在字母 z 之后,认为字母 a 即将到来。如果输入的字母为大写,则大写字母也是如此。
  • 在左边的路径上,如果超过了字母a,则认为字母z即将到来。如果输入的字母是大写字母,则大写字母也是如此。 需要验证输入的值是否有效:
  • 偏移量的值必须在 (-26;26) 范围内且不为 0。**

解决方法

让我们考虑一下你所有的字母都不是大写的,这会让事情变得更容易。


char* encodeMessage(const char* input,int arraySize,int offset) {
    
    char* encoded = (char*) malloc(arraySize);
    
    for(int i=0;i<sizeof(input) / sizeof(char);i++) {
        if(input[i] >= 'a' && input[i] <= 'z') {
            char newLetter = input[i] - 'a';
            newLetter += offset;
            newLetter = newLetter % 26;
            if(newLetter < 0) {
                newLetter += 26;
            }
            encoded[i] = newLetter + 'a';
        // added this condition to avoid encoding null characters
        } else {
            encoded[i] = input[i];
        }
        
    }
    return encoded;

}

您可以轻松修改它以编码大写字母。