C 프로그래밍에서 문자열을 역순으로 뒤집는 작업은 자주 만나게 되는 기본 문제입니다. 이 글에서는 라이브러리 함수 strrev()를 사용하는 방법과, 라이브러리 함수에 의존하지 않고 직접 알고리즘을 구현하는 방법 두 가지를 예제와 함께 살펴보겠습니다.
strrev() 함수를 사용한 방법
strrev()함수는 문자열을 역순으로 뒤집는 데 사용됩니다.- 뒤집힌 결과는 원본 문자열이 담긴 동일한 배열에 그대로 저장됩니다.
- 참고로
strrev()는 표준 C 라이브러리가 아니며, Turbo C 등 일부 컴파일러에서만 제공되는 비표준 함수입니다.
구문
strrev(string);
함수 없이 문자열을 뒤집는 프로그램을 작성하기 전에, 먼저 strrev() 함수를 활용한 예제를 확인해 보겠습니다. 두 방식을 비교하면 차이점을 쉽게 파악하고 개념을 명확하게 이해할 수 있습니다.
예제 코드
#include <stdio.h>
#include <string.h>
int main() {
char a[50];
printf("enter a string : ");
scanf("%s", a);
strrev(a);
printf("reversed string = %s", a);
return 0;
}
실행 결과
enter a string : Hello reversed string = olleH
strrev() 함수 없이 직접 구현하기
이번에는 strrev() 함수를 사용하지 않고 문자열을 뒤집는 프로그램을 직접 작성해 보겠습니다.
동작 원리
strlen()으로 문자열의 전체 길이를 구한 후, 마지막 문자의 인덱스(length)를 계산합니다.- 반복문을 돌면서 문자열의 앞쪽 문자와 뒤쪽 문자를 임시 변수
temp를 이용해 서로 교환(swap)합니다. - 교환이 한 번 일어날 때마다 뒤쪽 인덱스를 하나씩 감소시켜, 양 끝에서부터 가운데로 이동하며 전체를 뒤집습니다.
- 교환 횟수는 문자열 길이의 절반(
strlen(string)/2)이면 충분합니다.
예제 코드
#include <stdio.h>
#include <string.h>
int main() {
char string[20], temp;
int i, length;
printf("Enter String : ");
scanf("%s", string);
length = strlen(string) - 1;
for(i = 0; i < strlen(string) / 2; i++) {
temp = string[i];
string[i] = string[length];
string[length--] = temp;
}
printf("\nReverse string : %s", string);
return 0;
}
실행 결과
Enter String : Tutorialspoint Reverse string : tniopslairotuT
이처럼 반복문과 임시 변수만 활용하면 라이브러리 함수 없이도 간단히 문자열을 뒤집을 수 있습니다. 이 방식은 특정 컴파일러에 종속되지 않고 어디서든 동작한다는 장점이 있으며, 여기에 포인터를 더하면 더욱 효율적인 구현도 가능합니다.