从ASCII字符中减去一个数字

时间:2013-09-04 15:51:02

标签: c++ ascii

Converting lower & upper case ASCII characters

所以,我正在尝试做那个帖子中的内容,除非我想向后转换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字符。

2 个答案:

答案 0 :(得分:3)

lower_add已减去input_int,请勿再次执行此操作。将您的if更改为:

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

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

答案 1 :(得分: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;
}