问题描述
嗨,我不知道如何解决这个问题。当超过 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;
}
您可以轻松修改它以编码大写字母。