2014-03-11 5 views
0

문자열 키를 사용하여 일반 텍스트를 암호화하려고합니다. 어쨌든 일반 텍스트가 키보다 크면 키는 계속 키를 사용한다고 가정합니다. 키를 다시 시작하기 위해 모듈을 사용했지만 어떤 이유로 그것이 코드에 문제가 있습니까? 그런데 키 상태의 상한 또는 하한 상태는 요인이 아니므로이 값을 낮추는 이유입니다. 렌더링 된 도움을 주시면 감사하겠습니다. // 제안 된대로 정리 된 코드.모듈러스를 사용하여 텍스트 줄 바꾸기

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

int main (int argc, string argv[]) 

{ 


if (argc != 2) 
{ 

    printf("Ouch missing key\n"); 

return 1; 
} 

//get encryption keyword from argv array 
string k= (argv[1]); 

//test for non aplha character in plain text message 

int x; 

for (x = 0; x <strlen(argv[1]); x++) 
     { 

    if(isalpha(k[x]) == false) 

     { 
printf("Ouch ensure value is alphabetical only\n"); 

return 1; 

     } 
    } 

string m; 


m = GetString(); //get plain text from prompt 


for (int i= 0, j = 0; i< strlen(m) && j<= strlen(k); i++, j++) 


{ 

    if (

     isalpha(m[i]) && isupper(m[i])) 

      { 

       m[i]= (m[i]-'a' + (tolower(k[j % strlen(k)])-'a')) % 26 + 'A'; 

      } 

    else if (

     isalpha(m[i]) && islower(m[i]) 

     ) 
      { 

      m[i] = (m[i] - 'a' + (tolower(k[j %strlen(k)])- 'a')) % 26 + 'a'; 


      } 

    else 
     m[i] = m[i]; 
} 

printf("%s\n", m); 

} 
+0

방법이'C' 또는'C++ '인가? C 언어의 경우'string '은 어떻게 정의되어 있습니까? C++의 경우 std :: string 또는 다른 것입니까? std :: string 인 경우 strlen (m)은 어떻게 컴파일합니까? 그리고'GetString'은 실제로 무엇을 반환합니까? –

+1

나는 그것을 얻지 않았다. 정확히 무엇이 틀렸습니까? 메시지를 해독하십시오. (평문은 키가 계속해서 키를 사용한다고 가정하는 키보다 큽니다. ":" "그런데 키 상태의 위 또는 아래 상태가 중요하지 않습니다. 나는 왜 그것을 ""로 낮추기 위해 그것을 바꾼다. 또한 코드 정리 (거대한 공백 및 오해의 소지가있는 설명)가 있으면 좋을 것입니다. 그것을 읽기가 어렵다. – Drop

답변

0

당신의 코딩 언어로 C 수정 main() 경우,

int main (int argc, string argv[])

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

+0

코딩 언어는 C.입니다. GetString()은 프롬프트에서 m [message]로 표시된 일반 텍스트를 가져옵니다. 따라서 strlen (m)은 일반 텍스트의 길이를 사용합니다. 예를 들어 사용자가 프롬프트에서 일반 텍스트 "hello"를 입력하고 암호 k가 abc이면 h는 a, e, c, l을 c로 이동 한 다음 다른 l을 a와 o로 b로 암호화합니다 이 경우 올바른 출력은 a가 0이고 b가 1이고 c가 1 등이지만 hine은 hgllo를 반환하기 때문에 hfnlp입니다. 나는 코드 혼란에 동의한다, 나는 문제를 해결하기 위해 입찰서에 모든 것을 움직이고있다. – kyzen

+0

"int main (int argc, char * argv [])"에 대해서는 본 코스의 요구 사항에 따라 설명했습니다. – kyzen

+0

나는 그것을 분류했다. 키의 길이가 메시지의 길이보다 작은 지 확인해야했습니다. – kyzen

1
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <ctype.h> 
#include <cs50.h> 

int main (int argc, string argv[]){ 
    if (argc != 2){ 
     printf("Ouch missing key\n"); 
     return 1; 
    } 
    string k = argv[1]; 
    int len_k = strlen(k); 

    for (int i = 0; i < len_k; ++i){ 
     if(isalpha(k[i])) 
      k[i] = tolower(k[i]); 
     else { 
      printf("Ouch ensure value is alphabetical only\n"); 
      return 1; 
     } 
    } 

    string m; 
    m = GetString(); 

    for (int i= 0; i< m[i] ; ++i){ 
     if(isupper(m[i])) 
      m[i]= (m[i]-'A' + k[i % len_k] - 'a') % 26 + 'A'; 
     else if(islower(m[i])) 
      m[i]= (m[i]-'a' + k[i % len_k] - 'a') % 26 + 'a'; 
     else 
      m[i] = m[i];//no effect, no need 
    } 

    printf("%s\n", m); 
    free(m); 
    return 0; 
} 
관련 문제