SISS/HackerRank(C)

[Strings] Caesar Cipher

3190024 2020. 6. 14. 04:52

문자열의 문자 개수와 문자열(알파벳 대소문자와 그 외 특수기호를 포함)과 로테이션할 숫자가 차례대로 주어진다. caesarCipher함수에 문자열과 로테이션할 숫자(> 0)가 인자로 주어지며, 이들의 값을 각각 char* s와 int k라는 매개변수로 받는다. 

 

a를 3만큼 로테이션하면 a는 d가 된다. 원래의 문자가 가진 값에서 로테이션할 숫자를 더한다고 생각하면 된다.

 

i는 for문에서 사용할 변수이며, rotate는 로테이션하는 횟수다. length는 strlen()함수를 이용해 s의 길이를 저장한다. 반환할 char형 포인터 str에는 length+1만큼의 공간을 할당한다.

 

문자열 s의 모든 문자에 대해 아래의 코드(28~43행)를 실행한다.

rotate는 조건을 따져가며 변화하기 때문에 for문의 처음에서부터 rotate에 k를 저장한다.

i-for문 안에서는 s[i]가 알파벳 소문자일 때와 대문자일 때, 그리고 특수기호일 때에 따라 실행하는 코드가 달라진다.

 

문자가 알파벳 소문자일 때, 만약 로테이션한 결과(s[i] + rotate)가 'z'보다 큰 값을 가진다면 (s[i] + rotate)가 'z'보다 큰 동안은 rotate의 값을 한 바퀴씩 감소시킨다. 작아졌다면 s[i]와 변화된 rotate를 더한 값을 str[i]에 저장한다. 알파벳 대문자일 때도 마찬가지다. 'a', 'z' 대신 각각 'A', 'Z'를 사용하면 된다.

 

문자가 알파벳 대소문자가 아닌 경우에는 그냥 저장한다.

마지막으로 str을 반환한다.