이번 포스팅에서는 세 개의 문자열을 입력받고, 사용자가 직접 입력한 문자로 각 문자열의 모든 글자를 대체한 뒤 결과를 출력하는 C 프로그램을 다룹니다. 이후에는 수정된 세 개의 문자열을 하나로 연결(concatenate)하여 최종 결과를 화면에 보여줍니다.
문제 정의
예를 들어 "tutorials", "points", "best"라는 세 개의 문자열과 각각 x, y, z라는 치환 문자를 입력하면 다음과 같은 결과가 나와야 합니다.
입력:
문자열 1 : tutorials → 치환 문자 : x
문자열 2 : points → 치환 문자 : y
문자열 3 : best → 치환 문자 : z
출력:
문자열 1: xxxxxxxxx
문자열 2: yyyyyy
문자열 3: zzzz
연결 후 결과 : xxxxxxxxxyyyyyyzzzz알고리즘
프로그램의 동작 흐름은 아래 알고리즘과 같습니다.
- 크기 1000의 문자 배열 str1, str2, str3과 치환에 사용할 문자 변수 ch1, ch2, ch3, 반복문용 int 변수 i를 선언합니다.
- 사용자로부터 세 개의 문자열과 세 개의 치환 문자를 입력받습니다.
- for 반복문으로 str1의 길이(strlen(str1))만큼 순회하며 모든 위치를 ch1으로 덮어씁니다.
- 같은 방식으로 str2의 모든 문자를 ch2로, str3의 모든 문자를 ch3으로 교체합니다.
- 치환이 완료된 세 개의 문자열을 각각 출력합니다.
- strcat() 함수를 이용해 str1에 str2를 연결하고, 다시 str1에 str3을 연결합니다.
- 최종적으로 연결된 문자열을 출력합니다.
예제 코드 (C)
아래는 위 알고리즘을 실제로 구현한 C 소스 코드입니다.
#include<stdio.h>
#include<string.h>
int main() {
char str1[1000],str2[1000],str3[1000],ch1,ch2,ch3;
int i;
printf("\nenter a string : ");
scanf("%s\n%s\n%s", &str1, &str2, &str3);
fflush(stdin);
printf("\nenter the character you want to replace your first, second and third string with ? ");
scanf("%c %c %c", &ch1, &ch2, &ch3);
for (i = 0; i < strlen(str1); i++) // 첫 번째 문자열을 ch1으로 치환
str1[i]=ch1;
for (i = 0; i < strlen(str2); i++) // 두 번째 문자열을 ch2로 치환
str2[i]=ch2;
for (i = 0; i < strlen(str3); i++) // 세 번째 문자열을 ch3으로 치환
str3[i]=ch3;
printf("string 1 after replacement with %c : %s\n",ch1,str1);
printf("string 2 after replacement with %c : %s\n",ch2,str2);
printf("string 3 after replacement with %c : %s\n",ch3,str3);
strcat(str1,str2); // 문자열 1과 문자열 2를 연결
strcat(str1,str3); // 문자열 1과 문자열 3을 연결
printf("string after concatenation : %s",str1);
return 0;
}코드 핵심 포인트
- strlen() 함수로 각 문자열의 실제 길이를 구해 반복 횟수를 결정합니다.
- strcat(대상, 원본) 함수는 원본 문자열을 대상 문자열 뒤에 붙여 넣으므로, str1에 차례로 str2와 str3을 연결하면 세 문자열이 합쳐집니다.
- fflush(stdin)은 입력 버퍼를 비워 치환 문자 입력 시 엔터 키 등 남아 있는 값이 처리되지 않도록 하는 관용적 코드입니다. 단, 표준에서 정의된 동작은 아니므로 이식성이 중요한 환경에서는 주의가 필요합니다.
실행 결과
위 프로그램을 실행하면 다음과 같은 출력을 확인할 수 있습니다.
enter a string : tutorials point best enter the character you want to replace your first, second and third string with ? x y z string 1 after replacement with x : xxxxxxxxx string 2 after replacement with y : yyyyy string 3 after replacement with z : zzzz string after concatenation : xxxxxxxxxyyyyyzzzz
이처럼 간단한 반복문과 strcat() 함수만 활용하면 문자열 전체를 특정 문자로 치환하고 여러 문자열을 손쉽게 하나로 합칠 수 있습니다. 문자열 처리 기초를 익히는 데 좋은 예제이니 직접 실행해 보며 동작을 확인해 보시기 바랍니다.