Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 프로그래밍: 세 개의 문자열을 입력받아 지정한 문자로 바꾸고 연결하여 출력하기

이번 포스팅에서는 세 개의 문자열을 입력받고, 사용자가 직접 입력한 문자로 각 문자열의 모든 글자를 대체한 뒤 결과를 출력하는 C 프로그램을 다룹니다. 이후에는 수정된 세 개의 문자열을 하나로 연결(concatenate)하여 최종 결과를 화면에 보여줍니다.

문제 정의

예를 들어 "tutorials", "points", "best"라는 세 개의 문자열과 각각 x, y, z라는 치환 문자를 입력하면 다음과 같은 결과가 나와야 합니다.

입력:
    문자열 1 : tutorials → 치환 문자 : x
    문자열 2 : points → 치환 문자 : y
    문자열 3 : best → 치환 문자 : z
출력:
    문자열 1: xxxxxxxxx
    문자열 2: yyyyyy
    문자열 3: zzzz
    연결 후 결과 : xxxxxxxxxyyyyyyzzzz

알고리즘

프로그램의 동작 흐름은 아래 알고리즘과 같습니다.

  1. 크기 1000의 문자 배열 str1, str2, str3과 치환에 사용할 문자 변수 ch1, ch2, ch3, 반복문용 int 변수 i를 선언합니다.
  2. 사용자로부터 세 개의 문자열과 세 개의 치환 문자를 입력받습니다.
  3. for 반복문으로 str1의 길이(strlen(str1))만큼 순회하며 모든 위치를 ch1으로 덮어씁니다.
  4. 같은 방식으로 str2의 모든 문자를 ch2로, str3의 모든 문자를 ch3으로 교체합니다.
  5. 치환이 완료된 세 개의 문자열을 각각 출력합니다.
  6. strcat() 함수를 이용해 str1에 str2를 연결하고, 다시 str1에 str3을 연결합니다.
  7. 최종적으로 연결된 문자열을 출력합니다.

예제 코드 (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() 함수만 활용하면 문자열 전체를 특정 문자로 치환하고 여러 문자열을 손쉽게 하나로 합칠 수 있습니다. 문자열 처리 기초를 익히는 데 좋은 예제이니 직접 실행해 보며 동작을 확인해 보시기 바랍니다.