C 언어에서 squeeze(char[], char[])는 사용자가 직접 정의하는 함수(user-defined function)로, 두 문자열에 공통으로 포함된 문자, 즉 서로 같은 문자를 찾아 삭제하는 역할을 합니다.
문제 상황
C 프로그래밍 언어에서 squeeze 함수를 활용해 두 문자열 사이의 공통 문자를 어떻게 삭제할 수 있을까요?
해결 방법
이 프로그램에서는 사용자가 콘솔에 두 개의 문자열을 입력하면, 첫 번째 문자열에서 두 번째 문자열과 겹치는 문자들을 제외한 나머지 문자만 출력하는 코드를 작성합니다.
예제 코드
squeeze 함수의 동작 원리를 보여주는 C 프로그램은 다음과 같습니다.
#include<stdio.h>
void squeeze(char string1[], char string2[]); // 함수 원형 선언
int main(){
char string1[50];
char string2[30];
printf("enter the string1:");
scanf("%s", string1); // 키보드로부터 string1 입력
printf("enter the string2:");
scanf("%s", string2); // 키보드로부터 string2 입력
squeeze(string1, string2); // squeeze 함수 호출
printf("Final string is:%s\n", string1);
return 0;
}
void squeeze(char string1[], char string2[]){
int i, j, k;
for(i = k = 0; string1[i] != '\0'; i++){
for(j = 0; string2[j] != '\0' && string2[j] != string1[i]; j++)
; // 일치하는 문자 검사
if(string2[j] == '\0') // string2에 없는 문자라면
string1[k++] = string1[i]; // 결과 문자열에 저장
}
string1[k] = '\0'; // 새 문자열의 끝 표시
}
코드 동작 원리
- 바깥쪽 반복문 : string1의 각 문자를 처음부터 끝까지 하나씩 검사합니다.
- 안쪽 반복문 : 현재 검사 중인 문자가 string2에도 존재하는지 확인하며, 일치하는 문자를 발견하거나 string2의 끝에 도달하면 반복을 멈춥니다.
- 조건 검사 : 안쪽 반복문이 종료된 뒤 string2[j] == '\0'이라면 해당 문자는 string2에 없는 것이므로, string1[k++]에 저장하여 유지합니다.
- 마무리 처리 : 모든 검사가 끝나면 string1[k] = '\0'으로 새 문자열의 끝을 표시하여 최종 결과를 완성합니다.
실행 결과
프로그램을 실행하면 아래와 같은 결과를 확인할 수 있습니다.
Enter the string1 : Tutorial Enter the string2 : ut Final string : Torial
C 언어는 기본적으로 대소문자를 구분하기 때문에, 대문자 'T'는 그대로 유지되고 소문자 'u'와 't'만 제거되어 최종적으로 "Torial"이 출력됩니다.