2016-09-05 6 views
-1

В первом цикле for я пытаюсь добавить смещение в массив символов и не могу это сделать.Я не могу добавить смещение в массив символов и является ли мой метод получения строк и ints из командной строки оптимальным?

Мне также нужен вход с терминала, поэтому я написал код, который является ** для 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, но здесь вы не обрабатываете массив char как строку, поэтому не нужно.

#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

Пожалуйста, проявите свою признательность с благодарностью, спасибо! –