strcat() 사용하기
Coddy C 여정의 Logic & Flow 섹션에 포함된 레슨 — 63개 중 17번째.
strcpy()를 사용하여 문자열을 복사하는 방법을 배웠지만, 두 개의 문자열을 하나로 합치고 싶다면 어떻게 해야 할까요? 이것을 문자열 연결(concatenation)이라고 하며, C 언어는 이를 위해 <string.h> 라이브러리에서 strcat() 함수를 제공합니다.
strcat() 함수는 한 문자열의 내용을 다른 문자열의 끝에 추가합니다. 이 함수는 두 개의 인수를 받습니다: 대상 문자열(수정될 문자열)과 소스 문자열(끝에 추가될 문자열)입니다.
#include <stdio.h>
#include <string.h>
char greeting[20] = "Hello";
char name[] = " World";
strcat(greeting, name); // greeting은 이제 "Hello World"를 포함합니다대상 문자열이 원래 내용과 추가되는 새로운 내용을 모두 담을 수 있는 충분한 공간을 가지고 있는 것이 중요합니다. strcat() 함수는 대상 문자열에서 널 종료 문자를 찾아 제거하고, 소스 문자열을 해당 위치에 복사한 다음, 맨 마지막에 새로운 널 종료 문자를 추가합니다.
이 함수는 개별 단어로 전체 문장을 만들거나 사용자 입력을 미리 정의된 텍스트와 결합하는 것과 같이, 작은 조각들로부터 더 긴 문자열을 구성하는 데 필수적입니다.
때때로 숫자를 연결하기 전에 문자열로 변환해야 할 때가 있습니다. 이를 위해 <stdio.h>(대부분의 C 프로그램에 이미 포함되어 있음)의 sprintf()를 사용할 수 있습니다. sprintf()는 printf()와 똑같이 작동하지만, 화면에 출력하는 대신 형식이 지정된 결과를 char 배열에 씁니다.
예를 들어, 정수를 문자열로 변환하려면 다음과 같이 합니다:
int age = 25;
char ageStr[10];
sprintf(ageStr, "%d", age); // ageStr에는 이제 "25"가 포함됩니다
char result[30] = "Age: ";
strcat(result, ageStr); // result에는 이제 "Age: 25"가 포함됩니다sprintf()의 첫 번째 인수는 대상 char 배열이고, 두 번째는 형식 문자열(printf()와 동일한 형식 지정자 사용)이며, 나머지 인수는 삽입할 값입니다.챌린지
쉬움개인화된 메시지를 작성하기 위해 strcat() 함수를 사용하여 문자열 연결을 시연하는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다:
- 처리할 사람의 수를 나타내는 정수
n을 읽습니다. - 각 사람에 대하여:
- 입력에서 이름을 읽습니다.
- 입력에서 성을 읽습니다.
- 100개의 요소를 가진
fullName이라는 이름의 문자 배열을 생성합니다. strcpy()를 사용하여 이름을fullName에 복사합니다.strcat()을 사용하여 단일 공백 " "을fullName에 추가합니다.strcat()을 사용하여 성을fullName에 추가합니다.- 150개의 요소를 가진
greeting이라는 이름의 문자 배열을 생성합니다. strcpy()를 사용하여 "Hello, "를greeting에 복사합니다.strcat()을 사용하여fullName을greeting에 추가합니다.strcat()을 사용하여 "! Welcome to our program."을greeting에 추가합니다.- 최종 인사 메시지를 출력합니다.
- 모든 사람을 처리한 후, 요약 메시지를 생성합니다:
- 100개의 요소를 가진
summary라는 이름의 문자 배열을 생성합니다. strcpy()를 사용하여 "Total people processed: "를summary에 복사합니다.- 숫자
n을 문자열로 변환하고strcat()을 사용하여summary에 추가합니다. - 요약 메시지를 출력합니다.
- 100개의 요소를 가진
문자열 함수를 사용하기 위해 <string.h> 헤더를 포함하는 것을 잊지 마세요.
출력은 다음과 같은 형식으로 표시되어야 합니다:
Hello, [FirstName LastName]! Welcome to our program.
Hello, [FirstName LastName]! Welcome to our program.
...
Total people processed: [n]예를 들어, 입력이 다음과 같다면:
2
John
Doe
Alice
Smith출력은 다음과 같아야 합니다:
Hello, John Doe! Welcome to our program.
Hello, Alice Smith! Welcome to our program.
Total people processed: 2이 챌린지는 여러 문자열을 함께 연결하기 위해 strcat()을 사용하는 방법, 초기 문자열 설정을 위해 strcpy()와 결합하는 방법, 그리고 여러 구성 요소로부터 복잡한 문자열을 단계별로 구축하는 방법에 대한 이해도를 테스트합니다.
치트 시트
<string.h>의 strcat() 함수는 소스 문자열을 대상 문자열의 끝에 추가하여 두 문자열을 연결(결합)합니다.
구문: strcat(destination, source)
#include <stdio.h>
#include <string.h>
char greeting[20] = "Hello";
char name[] = " World";
strcat(greeting, name); // greeting은 이제 "Hello World"를 포함합니다.중요: 대상 문자열은 원래 내용과 추가된 내용을 모두 담을 수 있는 충분한 공간이 있어야 합니다. 이 함수는 대상 문자열에서 널 종료 문자를 찾아 제거하고, 그 위치에 소스 문자열을 복사한 다음, 마지막에 새로운 널 종료 문자를 추가합니다.
<stdio.h>의 sprintf() 함수는 printf()와 비슷하게 작동하지만, 형식이 지정된 결과를 출력하는 대신 문자 배열(문자열)에 씁니다. 이는 정수(또는 다른 값)를 문자열로 변환하는 데 유용합니다.
구문: sprintf(destination, format, value)
#include <stdio.h>
int num = 42;
char numStr[10];
sprintf(numStr, "%d", num); // numStr은 이제 "42"를 포함합니다.중요: 대상 배열은 널 종료 문자를 포함하여 결과 문자열을 담을 수 있을 만큼 충분히 커야 합니다.
직접 해보기
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
// 인원수 읽기
int n;
scanf("%d", &n);
// TODO: 아래에 코드를 작성하세요
// 각 사람을 처리하고 인사 메시지를 생성합니다
// 그런 다음 요약 메시지를 생성하고 표시합니다
return 0;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.