所以我写了加密字符串的代码。被称为Ceasar密码。
但不是经常做正确的轮换。 对于Shift = 1,A = 65,所以我做65 + shift = 66,这是B. ... C => D.D => E .... 如果我想做左旋转怎么办?
现在,A(65)=> Z(90),B(66)=> A(65),C(67)=> B(65)... Y(89)=> X(88)
众所周知,除了A(65)之外,我们可以像原来一样做。
所以不要创建if(notA)... else(句柄A)。
有没有优雅的方法呢?此外,如果班次是其他数字,还有更多案例需要考虑...... 有没有其他方法可以这样做?喜欢使用mod还是什么?
答案 0 :(得分:0)
有一张查询表。
int shift;
char inputstr[100]; //Dynamically allocate inputstr if needed.
//Get values for 'shift' and 'inputstr'
char encrypt[100]; //Resulting encrypted array
char *alpha = "AB.....Z";
//
for(i=0;i<strlen(inputStr);i++)
encrypt[i] = alpha[(inputStr[i] - alpha[0]+shift)%26];
同样,如果你想混合使用小写字母,数字等,你可以有其他查找表,并相应地改变逻辑。
答案 1 :(得分:0)
将班次设置为始终正确并接受负值以处理左班次
所以
char shift(int amount, char c) {
return ((((c - 'A') + amount) + 26) % 26) + 'A';
}
如果用-3调用它,它将向左移动
请注意,这只适用于大写字母,您可以使它适用于小写字母只能将“A”更改为“a”,但在写入的同时它不适用于大写和小写。
编辑我将其更改为一行
这是输出
c = shift(-3, 'B'); = Y
c = shift(-3, 'F'); = C
c = shift(3, 'G'); = J
c = shift(3, 'Y'); = B