2016-03-26 2 views
0

Я пытаюсь создать функцию, которая получает строку и число, и если число больше «0», поэтому он сделает цезарский шифр со строкой и номером, который пользователь вошел. например -> 'stack', а число - '3' -> 'uvdfn'. , если номер равен «0», поэтому он изменит строку. например - 'stack' -> 'kcats'Цезарный шифр и программа обратного текста

Я не знаю, в чем проблема с кодом, я не вижу ничего плохого.

/********************************* 
 
* Class: MAGSHIMIM C2 \t \t \t * 
 
* Week 3       * 
 
********************************** 
 
* Thank you for Ofek and Dor for * 
 
* Editing this template :)  * 
 
**********************************/ 
 

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

 
void decryptText(char* encText, int n); 
 

 
#define STR_SIZE 50 
 
int main(void) 
 
{ 
 
\t char str[STR_SIZE]; 
 
\t int num = 0; 
 

 
\t printf("Please enter the string : "); 
 
\t fgets(str, STR_SIZE, stdin); 
 

 
\t printf("Please enter a number : "); 
 
\t scanf("%d", &num); 
 

 
\t decryptText(str, num); 
 

 
    system("PAUSE"); 
 
\t return 0; 
 
} 
 

 

 
void decryptText(char* encText, int n) 
 
{ 
 
\t int i = 0; 
 
\t int j = 0; 
 
\t char temp = 0; 
 

 
\t int strLen = strlen(encText); 
 

 
\t if (n > 0) 
 
\t { 
 
\t \t for (i = 0; i < strLen; i++) 
 
\t \t { 
 
\t \t \t if (*(encText + i) == ' ') { } 
 
\t \t \t else 
 
\t \t \t { 
 
\t \t \t \t if (*(encText + i) >= 'x') 
 
\t \t \t \t { 
 
\t \t \t \t \t *(encText + i) = (*(encText + i)) - 26; 
 
\t \t \t \t } 
 
\t \t \t \t *(encText + i) = (*(encText + i)) + n; 
 
\t \t \t } 
 
\t \t } 
 

 
\t \t printf("The array after the program deciphered it : \n"); 
 
\t \t printf("%s", encText); 
 
\t } 
 

 
\t else if (n == 0) 
 
\t { 
 
\t \t for (i = 0; i < strLen; i++) 
 
\t \t { 
 
\t \t \t for (j = 0; j >= 0; j--) 
 
\t \t \t { 
 
\t \t \t \t temp = *(encText + i); 
 
\t \t \t \t *(encText + i) = *(encText + j); 
 
\t \t \t \t *(encText + i) = temp; 
 
\t \t \t } 
 
\t \t } 
 

 
\t \t printf("The array after the program cracked it : \n"); 
 
\t \t printf("%s", encText); 
 
\t } 
 
}

ответ

0

При движении задним ходом строки вы обмениваетесь буквы спереди назад, а затем от задней к передней, и поэтому вы в конечном итоге с той же строке, что вы начали. Вам также не нужно использовать все указатели, потому что вы можете использовать подтипирование массива, что делает его более читаемым. Попробуйте что-то еще:

j = strLen-1; 
for (i = 0; i < strLen/2; i++, j--) { 
    temp = encText[i]; 
    encText[i] = encText[j]; 
    encText[j] = temp; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^