본문으로 바로가기

[C언어] 포인터를 이용한 문자열 함수 만들기

category C 2014. 6. 3. 14:53

문자열 함수

size_t strlen( const char *string );
문자열의 길이를 구한다. 이 함수는 문자열이 끝나는 NULL문자를 제외한 길이를 리턴해준다.

헤더파일 : <string.h>

ex)

char buffer[20] = "I am Neo";

int len = strlen(buffer); // 8

 

char *strcpy( char *strDestination, const char *strSource );
문자열을 복사한다. 복사가 될 대상을 왼쪽, 복사할 내용의 원본은 오른쪽 파라미터에 위치한다.

헤더파일 : <string.h>

<주의사항> 문자열을 복사할 때 복사할 내용의 원본 문자열에서 NULL을 포함하여 복사하기    때문에 복사가 될 대상 문자열의 크기가 복사할 원본 문자열 크기보다 같거나 더 커야 한다.

ex1)

char buffer[20];

//buffer = "Hello";       // (x)

strcpy(buffer, "Hello"; // (o)

ex2) 주의사항에서 말했던 것 처럼 원본 문자열이 대상 문자열의 크기보다 크면 안된다.

char buffer[10] = "I am Neo";

char name[12] = "The Calling";

strcpy(buffer, name);

printf("buffer = %s\n", buffer);

ex3)

char buffer[10] = "I am Neo";

char name[10] = "Queen";

strcpy(buffer, name);

printf("buffer = %s\n", buffer);

 

Q

u

e

e

n

\0


 

 

 

 

 

 

 

I

 

a

m

 

N

e

o

\0

 

Q

u

e

e

n

\0

e

o

\0

 

 

char *strcat( char *strDestination, const char *strSource );

문자열을 덧붙이는 기능을 한다. 문자열끼리 연결한다라고 말할 수 있다.

대상 문자열이 끝나는 NULL 지점부터 원본 문자열을 NULL을 포함해서 덧붙인다.

<주의사항> 대상 문자열이 덧 붙이는 문자열(NULL을 포함)을 보다 남아 있는 공간이 같거나 더 커야 한다.

ex1)

char title[10] = "Love "; // 남아 있는 공간 5

char name[10] = "Beatles"; // 덧 붙일 문자수 8

strcat(title, name); // (x)

위의 내용이 가능하려면 아래와 같이 수정해야함

char title[20] = "Love "; // 남아 있는 공간 15

char name[10] = "Beatles"; // 덧 붙일 문자수 8

strcat(title, name); // (o)

 

ex2)

char title[10] = "The "; // 남아 있는 공간 6

char name[10] = "One"; // 덧 붙일 문자수 4

strcat(title, name); // (o)

 

O

n

e

\0

 

 

 

 

 

 

 

 

 

 

  

T

h

e

 

\0

 

 

 

 

 

T

h

e

 

O

n

e

\0

 

 

 

int strcmp( const char *string1, const char *string2 );
문자열을 비교한다.

string1 > string2 일 경우 +1 을 리턴한다.

string1 ==  string2 일 경우  0 을 리턴한다.

string1 < string2 일 경우 -1 을 리턴한다.

ex1)

int result = strcmp("B", "A"); // +1 B(66), A(65)

int result = strcmp("AB", "A"); // +1 A(65)B(66), A(65)NULL(0)

ex2)

int result = strcmp("A", "A"); //  0 A(65), A(65)

int result = strcmp("AB", "AB"); // 0 A(65)B(66), A(65)B(66)

ex3)

int result = strcmp("A", "B"); //  -1 A(65), B(66)

int result = strcmp("AB", "ABC"); // 0 A(65)B(66)NULL(0), A(65)B(66)C(67)

 

<참조>

sprintf

itoa

atoi

 

<실습>

아래와 같은 기능을 하는 함수를 포인터를 이용해서 만들어 보자!

포인터 배열 등 배운것을 응용할 뿐만 아니라 알고리즘 또한 훈련할 수 있다.

 

StrLen

- 문자열 길이 구하기

int StrLen(char* pStr) 


StrCpy

- 문자열 복사하기

void StrCpy(char* pDst, char* pSrc)


StrCat

- 문자열 덧붙이기

void StrCat(char* pDst, char* pSrc)


StrCmp

- 문자열 비교하기

int StrCmp(char* pDst, char* pSrc)