#3-2. 문자열

Kal·2021년 7월 19일
0

C언어

목록 보기
5/17

1.1 배열로 문자열 표현하기

char data1 = 'H'; char data2 = 'e'; ...

1바이트 char형 변수를 일일이 선언해서 문자를 저장하면 난감한 상황이 발생할 수 있다. 따라서 간편하게 문자열 또한 이 배열을 사용해 표현할 수 있다.

- 문자열의 길이 정보 표시하기

C언어에서 문자를 저장하는 데 가장 적합한 자료형은 char형이다. 따라서 문자열을 저장하려면, char형 변수를 묶어서 관리하는 char 배열을 사용해야 한다.

배열을 이용하여 문자열을 저장하려면 문자 정보 외에도 배열에 몇 개의 문자가 있는지 함께 저장해야한다.

입력하려는 문자의 끝에 NULL(널) 문자 0을 추가로 입력하여 ' 이 배열에 저장된 정보는 문자열이다' 라고 컴파일러에게 알려준다.

(1) char data[6] = { 'h', 'a', 'p', 'p', 'y', 0};

여기서 사용하는 0은 아스키코드 NULL문자를 의미하므로 작은따옴표 ' ' 을 사용하지 않는다.

그런데, {}와 ' ' 을 사용하여 문자열에 포함된 문자를 하나씩 나열하는 것은 불편하다.

(2) char data[6] = "happy";

문자열을 표현하기 위해 "happy"라고 큰따옴표를 이용했다. 따라서 이 문자열이 차지하는 메모리 크기는 5바이트가 아니라 뒤에 NULL문자 0이 자동으로 추가되어 6바이트이다.

따라서 위의 두 표현은 서로 같은 뜻이다.

배열에 문자열을 저장하고 출력하기

printf함수로 문자열을 출력할 때 %s를 이용한다. 문자열을 의미하는 string의 첫 글자를 생각하면 외우기 쉽다. printf 함수는 지정한 메모리 그룹의 요소 값이 NULL 문자 0이 나올 때까지 문자들을 반복적으로 출력해준다.

#include <stdio.h>

void main()

{
	char data[6] = { 'h','a','p','p','y',0 };
	char ment[] = "C programming~";

	printf("%s\n", data);
	printf("%s\n", ment);
}

char ment[]은 char ment[15] = {'C','','p','r','o','g','r','a','m'--}과 같다. 공백으로 표현해주면 굳이 변수의 요소 크기를 써넣지 않아도 출력값을 얻을 수 있다.

- 저장된 문자열의 길이 구하기

배열 크기가 항상 문자열의 길이와 같게 만들어지는 것은 아니기 때문에 배열에 저장된 문자열의 길이를 알기 위해서는 문자열의 끝(0, EOL, End Of Line)을 찾는 코드가 필요하다.

char data[6] = "happy";
int count = 0;
while (data[count]!=o) count++; /* data의 요소 값이 NULL 문자 0이면 문자열의 끝이라는 뜻이다. */

배열에 저장된 문자열의 길이를 구하는 함수 만들기

#include <stdio.h>

int GetStringLength(char data[]) /*매개변수 data의 []안에 숫자를 적어넣지 않아도 된다. 숫자를 적어도 
오류가 발생하지는 않으나, 실제로 전달되는 배열의 크기에 영향을 받기 때문에 무시된다. 피호출함수 */

{
	int count = 0; /* data[count]가 0이 나올 때까지 count의 개수를 더함. */
	while(data[count])count++;

		return count; /* 문자열의 길이를 반환함 */

}

void main()

{
	int data_length; /* 문자열 길이를 저장할 변수 */
	char data[10] = { 'h','a','p','p','y',0, }; /* "happy" 문자열을 저장함 */

	data_length = GetStringLength(data); /* data 변수에 들어있는 문자열의 길이를 구함 */ 
    /* data 변수에 저장되어 있던 값들도 그대로 복사되기 때문에, GetStringLength 함수를 호출할 때
    배열의 이름(data)만 사용하면 된다. */
    
	printf("data length = %d\n", data_length); /* 문자열의 길이를 출력함 */
}

1.2 문자열을 다루는 C 내장 함수

문자열은 프로그램에서 자주 사용하기 때문에 편하게 사용할 수 있도록 C언어에서 여러 함수들을 제공한다.

문자열 표준 함수의 이름은 string의 줄임 표현인 str라는 접두어로 시작한다. 문자열의 길이를 구하는 함수는 strlen, 복사하고 싶으면 strcpy, 문자열 뒤에 다른 문자열을 덧붙이는 함수는 strcat이다.

strlen(문자열이 저장된 변수 이름) : 문자열 길이 구하는 표준 함수

strcpy(복사해서 저장할 변수 이름, 복사할 기존 변수 이름) : 문자열 복사 함수

strcat(기존 문자열이 저장된 변수 이름, 새로 덧붙일 문자열) : 문자열 덧붙이는 표준 함수

다만, 이 함수들을 사용하려면 #include 전처리기로 string.h파일을 소스 파일 안에 포함시켜야 한다.

문자열의 길이를 구하는 내장 함수 strlen

#include <stdio.h>
#include <string.h> /* 문자열 표준 함수를 사용하기 위해 추가함 */

void main()

{
	int data_length; /* 문자열 길이를 저장할 변수 */
	char data[10] = { 'h','a','p','p','y',0 }; /* " happy " 문자열을 저장함 */
	data_length = strlen(data);
    /* data 변수에 들어 있는 문자열의 길이를 구함 */

	printf("data_length = %d\n", data_length);
    /* 문자열의 길이를 출력함 */
    
}

문자열을 복사하고 추가하는 내장 함수 strcpy, strcat

#include <stdio.h>
#include <string.h>

void main()

{
	char data[10] = { 'a','b','c',0 };
	char result[16];

	strcpy(result, data); /* data에 저장된 값을 result로 복사함 */
	strcat(result, "def"); /* "def"라는 문자열을 result의 값 뒤에 덧붙임 */

	printf("%s + \"def\" = %s\n", data, result); 
}

Q. data 배열에 다음처럼 "Hello"라는 문자열이 저장되어 있다. strcpy와 strcat 함수를 사용하여 "Hello world!"를 출력해 보아라.

#include <stdio.h>
#include <string.h>

void main()

{
	char data[10] = { 'H','e','l','l','o',0 };
	char result[20];

	strcpy_s(result, data);
	strcat_s(result, " world!");

	printf("\"%s\" ", result);

 }
 
 출력값 : "Hello world!"
 
 
profile
프로그래밍 독학

0개의 댓글