使用指针移动+1来加密和解密字符串

时间:2017-09-19 11:01:41

标签: c string function pointers encryption

嗨我在尝试使用指针加密和解密字符串时遇到困难。我需要将字母表移动+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

由于

2 个答案:

答案 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);
  }