2016-09-05 16 views
-1

在第一個for循環中,我試圖向char數組添加一個偏移量,但無法這樣做。我無法向char數組添加偏移量,並且是從命令行最佳接收字符串和整數的方法?

我也想從終端輸入,所以我寫了一個**到argv [2]的代碼,並使用atoi()將char從argv [1]轉換爲int。

int main(int argc, char *argv[]) { 

    if(argc != 3) { 
     printf("Enter an integer followed by a string \n\n"); 
     return 1; 
    } 

int i; 
int offset = atoi(argv[1]); 
char **p_message; 
p_message = &argv[2]; 
char encrypt[strlen(*p_message)]; 

printf("You Entered: %d, %s \n", offset, *p_message); 

for(i = 0; i < strlen(*p_message); i++) 
    { 
     encrypt[i] = ((*p_message[i] + offset) % 26); 
    } 

for(i = 0; i < strlen(*p_message); i++) 
{ 
    printf("%c", encrypt[i]); 
} 


return 0; 

} 

回答

0

主要問題是您在模數運算之前和之後沒有進行字母表調整。我添加變量letter作爲int,以便算術不會溢出。

您可以通過刪除**p_message的其中一顆星來簡化程序。另外,通常你會分配一個比字符串長1的數組,以允許nul終結符,但是在這裏,你並不是將字符串視爲一個字符串,所以不需要。

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main(int argc, char *argv[]) { 

    if(argc != 3) { 
     printf("Enter an integer followed by a string \n\n"); 
     return 1; 
    } 

    int i; 
    int offset = atoi(argv[1]); 
    char *p_message;          // remove a * 
    p_message = argv[2];         // remove & 
    char encrypt[strlen(p_message)];      // remove * 
    int letter;            // added 

    printf("You Entered: %d, %s \n", offset, p_message); // remove * 

    for(i = 0; i < strlen(p_message); i++) {    // remove * 
     letter = p_message[i];        // remove * 
     if(letter >= 'a' && letter <= 'z') {    // if lower case 
      letter = 'a' + ((letter - 'a') + offset) % 26; 
     } 
     else if(letter >= 'A' && letter <= 'Z') {   // if upper case 
      letter = 'A' + ((letter - 'A') + offset) % 26; 
     } 
     encrypt[i] = letter; 
    } 

    for(i = 0; i < strlen(p_message); i++) {    // remove * 
     printf("%c", encrypt[i]); 
    } 

return 0; 
} 
+0

謝謝,我很感激 – Nomad343

+0

請用投票表示感謝,謝謝! –

相關問題