-2

转换小写和大写 ASCII 字符

因此,我正在尝试执行该线程中的操作,除非我想向后进行 ascii 转换(仅限字母),如果我给出数字 1。

b+1 = a

B+1 = A (capital becomes capital)

c+2 = a

z+1 = y

a+1 = z
int lower_add = ((letter - 'a' - input_int) % 26) +'a';
if ((lower_add -'a' - input_int) < 0)
    lower_add = lower_add +26;

这几乎得到了它,除了在某些情况下 b+1 会转到其他一些非字母 ascii char。

4

2 回答 2

3

lower_add已经input_int减掉了,不要再做第二次了。将您更改if为:

if (lower_add < 'a')
    lower_add += 26;

这仍然无法正确处理大写字母,您可能需要进行范围测试来决定是否减去'a''A'.

于 2013-09-04T15:52:49.600 回答
0

我会做这样的事情:

#include <iostream>
#include <ctype.h>

class letter { 
    char current;
public:
    letter(char x) : current(x) {}
    letter &operator+=(int v) { 
        if (islower(current)) {
            int pos = current - 'a' - v;
            if (pos < 0) pos += 26;
            current = pos + 'a';
        }
        else if (isupper(current)) {
            int pos = current - 'A' - v;
            if (pos < 0) pos += 26; 
            current = pos + 'A';
        }
        return *this;
    }
    friend std::ostream &operator<<(std::ostream &os, letter const &l) { 
        return os << l.current;
    }   
};

int main() { 
    letter a('c');
    a += 3;
    std::cout << a;
}
于 2013-09-04T16:06:51.937 回答