2014-01-07 5 views
1

26 문자 = 13/13 알파벳 대문자로 대문자를 대문자로 바꿀 약간의 함수를 작성하려고합니다. I는 다음 코드를 시도했지만 어떤 이유는 첫 번째 문자 만 작동차이를 계산하여 문자열의 개별 문자의 알파벳 값을 반전합니다.

A = Z, B = Y, C = X ....

"bamba"라고 입력하면됩니다. 그것은 'b'를 'y'로 바꾸는 것으로 시작하지만 그다지 달라 붙지 않고 다른 모든 문자를 'y'로 바꿉니다. 그리고 나는 "yyyyy"를 얻습니다.

코드를 가지고 놀아 보았는데 현재의 문자로 종속성을 제거하면 안전하게 말하자면 1 (a = b, b = c ...)의 문자를 모두 늘릴 수 있다는 것을 발견했습니다

symmetric_difference = 1; **commented out** //21 - toCrypt[i]; 

나는 모든 것을 보면서 내가 찾은 가장 가까운 것은 "문자열에서 개별 문자의 알파벳 값을 반전" 했지만이 이상하고 중복 보이는 방법을 설명합니다.

누구나 내가 뭘 잘못했는지 말해 줄 수 있습니까?

#include <iostream> 
using namespace std; 

void crypto(char[]); 

int main() 
{ 
    char toCrypt[80]; 

    cout << "enter a string:\n"; 
    cin >> toCrypt; 

    crypto(toCrypt); 

    cout << "after crypto:\n"; 
    cout << toCrypt; 
} 

void crypto(char toCrypt[]) // "Folding" encryption. 
{ 
    int size = strlen(toCrypt); 
    int symmetric_difference; 

    for (int i = 0; i < size; i++) 
    { 
     symmetric_difference = 121 - toCrypt[i]; // Calculate the difference the letter has from it's symmetric counterpart. 

     if (toCrypt[i] >= 97 && toCrypt[i] <= 110) // If the letter is in the lower half on the alphabet, 
      toCrypt[i] += symmetric_difference; // Increase it by the difference. 
     else 
     if (toCrypt[i] >= 111 && toCrypt[i] <= 122) // If it's in the upper half, 
      toCrypt[i] -= symmetric_difference; // decrease it by the difference. 
    } 
} 
+0

와 호환되지 않습니다 당신이 찾고있는 가치. 계산은 간단합니다 :'toCrypt [i] = 121 - toCrypt [i]' – quamrana

답변

2

당신은 예를 들어, bamba에서이

for (int i = 0; i < size; i++) 
{ 
    toCrypt[i] = 'z' - toCrypt[i] + 'a'; 
} 
+0

고마워요! [ 'a'+ ('z'- toCrypt [i])] 이 방법을 사용하면이 방법이 더 적합합니다. – user2962533

1

을 시도 할 수있다, 모든 문자는 if 문 처음으로 이동 : toCrypt[i] += symmetric_difference;.

toCrypt[i] += symmetric_difference; 
-> toCrypt[i] = toCrypt[i] + 121 - toCrypt[i]; 
-> toCrypt[i] = 121 = 'y' 
+0

어 ... 고마워요. (* 벽에 앞머리 머리 *) – user2962533

0

오타를 만들지 않은 경우 다음 기능 정의를 사용해보십시오.

void crypto(char s[]) 
{ 
    static const char alpha[] = "abcdefghijklmnopqrstuvwxyz"; 
    const char *last = alpha + sizeof(alpha) - 1; 

    while (char &c = *s++) 
    { 
     if (const char *first = std::strchr(alpha, c)) c = *(last - (first - alpha) - 1); 
    } 
} 

소문자를 순서대로 정렬 할 필요는 없다는 점을 고려하십시오. 예를 들어 잘못 입력하지 않으면 EBCDIC에 유효하지 않습니다.

난 당신이 symmetric_difference`이`찾을 수있을 거라 생각 나는

const char *last = alpha + sizeof(alpha) - sizeof('\0'); 

을 위해 문을

const char *last = alpha + sizeof(alpha) - 1; 

을 대체하고자하지만, 마지막 C. :