嗨我在尝试使用指针加密和解密字符串时遇到困难。我需要将字母表移动+1。 示例:Hello将是Ifmmp。而且我还需要消除其他字符,例如$%^^。所以当字符串是' z' +1会给我一个'一个' 这是我的代码。
char *cipher(char *s) {
int i =0;
int shift = 1;
while(*(s+i)!= '\0') {
if (*(s+i)) {
*(s+i)+= (shift);
}
i++;
}
}
char *decipher(char *s) {
int i =0;
int shift = -1;
while(*(s+i)!= '\0') {
if (*(s+i) +shift) {
*(s+i)+= (shift);
}
i++;
}
}
我目前的输出是: 密码:abcxyz - > bcdyz { 解密:bcdyz { - > abcxyz
由于
答案 0 :(得分:0)
First of all
,将while更改为For-Loop,如果在for循环中增加itearator并且它的条件是最好的可读代码是For-Loop
Second
,您需要添加条件 -
If
这封信是'z'
分配' a'
else
做同样的事情
第三,如果你想要避免另外的字母,你需要添加条件:
if((*s+i)<'a' || (*s+i)>'z'){
do what you want
} else {
avoide
} /// it will work if you use character encoding that the alphebet is by order and continuous
我在chipher函数中添加了更改代码,您将把它添加到下一个函数
char *cipher(char *s){
int shift = 1;
for(int i=0; *(s+i)!= '\0'; i++){
if (*(s+i)){
//i add that condtion for 'z' you need to add the same condition to the next function
if(*(s+i)=='z'){
*(s+i)='a';
}else{
*(s+i)+= (shift);
}
}
}
}
char *decipher(char *s){
int shift = -1;
for(int i=0 ;*(s+i)!= '\0'; i++){
if (*(s+i) +shift){
*(s+i)+= (shift);
}
}
}
答案 1 :(得分:0)
我需要将字母表移动+1
仅移动字符a-z
。所以代码必须检测那些
char *shift_AZ(char *s, int shift) {
// Bring shift into 0-25 range
shift %= 26;
if (shift < 0) shift += 26;
// loop until at end of string
// while(*(s+i)!= '\0') {
while(*s) {
// Assuming ASCII, detect select characters
if ((*s >= 'a') && (*s <= 'z')) {
// Do the shift, wrap around via %26
*s = (*s - 'a' + shift)%26 + 'a';
}
s++; // next chraracter
}
char *cipher(char *s) {
return shift_AZ(s, 1);
}
char *decipher(char *s) {
return shift_AZ(s, -1);
}