2016-03-26 12 views
-1

Bir dize ve sayı alan bir işlev yapmaya çalışıyorum ve sayı '0' büyükse, bu durumda sezgisel şifreyi dize ve sayı ile kullanıcı girmiştir. örneğin -> 'yığın' ve sayı '3' -> 'uvdfn' dir. sayı '0' ise, dizgeyi tersine çevirir. örneğin - 'yığın' -> 'kcats'Sezaryen ve ters metin programı ile sorun

Kodla ilgili sorunun ne olduğunu bilmiyorum, yanlış bir şey göremiyorum.

#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 } 
 
}

+3

"Ben kodu ile sorun nedir bilmiyorum" ... çok etkili doesnt bakmak - kuyu, biz de bilmiyoruz. Neden sorunun tam olarak ne olduğunu açıklamak için birkaç dakikanızı ayırmıyorsunuz? (yani, hangi girdiyi test ettiniz, hangi yanlış çıktıyı aldınız, kodunuzu adım adım ayıkladığınızda gözlemleriniz nelerdi?). –

+0

'için (j = 0; j> = 0; j -)' hiçbir şey yapmayacaktır. –

+0

Hey Barak, üzgünüm ... Sorun şu ki, sezaryen durumunda, hiçbir şey olmuyor, bunun sonucunu basmıyor. Ters metin durumunda, kullanıcının girdiği aynı dize yazdırır. @barakmanos –

cevap

0
if (*(encText + i) >= 'x') 
    { 
     *(encText + i) = (*(encText + i)) - 26; 
    } 

if (*(encText + i) + n > 'z') 
{ 
    *(encText + i) = (*(encText + i)) - 26; 
} 
+0

Teşekkür ederim, ama bir nedenden 'wxyz' bir string olarak girdiğimde ve '4' bir sayı olarak yazıyorsa '{|} ~' –

0

seninkodlamamod kısmında hata aşağıdaki snippet'tir olmalı: Bütün yo

if (*(encText + i) >= 'x') 
{ 
    *(encText + i) = (*(encText + i)) - 26; 
} 
*(encText + i) = (*(encText + i)) + n; 

İlk Alt veya büyük harfli giriş yapıp yapmadığınızı belirlemeliyim. Başlamak için sadece küçük harfli girdi kabul ediyoruz. Bu snippet'te ilk önce bir "a" kelimesini gerçek karakterden çıkarmanız, ikinci olarak seçilen rotasyon sayısını hesaplanan değere eklemeniz, üçüncü olarak bunun modulünü hesaplamanız ve dördüncü olarak bir "a" değeri eklemeniz gerekir.

char temp; 
temp = *(encText + i); 
temp -= 'a'; 
temp += n; 
temp %= 26; 
temp += 'a'; 
*(encText + i) = temp; 

veya kısaca

:

*(encText + i) = (*(encText + i) - 'a' + n) % 26 + 'a'; 

BTW: Sizin çatlama operasyonu