컴퓨터 이론/C언어 & 자료구조 & 알고리즘

07. 문자열 함수 라이브러리

컴퓨터공부용 2023. 3. 21. 14:54

문자열은 배열을 조작하다 보니 상대적으로 기본 연산이 제한되어 있다.

C 언어에서는 문자열 함수 라이브러리를 제공하여 제한된 연산을 수행할 수 있도록 도움을 주고 있다.

<string.h>에서 다양한 문자열 관련 함수를 제공한다.


문자열 길이 반환

C 언어에서 문자열을 입력받아 처리하다 보면 문자열의 길이를 알아야 하는 경우가 종종 있다.

그런 경우 strlen() 함수를 이용하여 문자열 길이를 반환받을 수 있다.

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

int main()
{
    char str1[100];
    
    scanf("%s", str1);
    printf("%d\n", (int)strlen(str1));

    return 0;
}

strlen() 함수의 경우 반환 타입이 unsigned int이므로 우리가 일반적으로 사용하기 위해서는 int형으로 타입 캐스팅을 해주는 것이 사용하기 용이할 것이다.


문자열 복사

C 언어에서 한 문자열 변수에 있는 값을 다른 변수에 옮겨보자.

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

int main()
{
    char str1[100] = "Copy!";
    char str2[100];
    
    str2 = str1;
    
    printf("%s\n", str1);
    printf("%s\n", str2);

    return 0;
}

일반적으로 이러한 방식을 사용할 텐데 이러면 문자열에서는 에러가 발생하게 된다.

이 문제를 해결하기 위해서는 문자열을 복사하는 용도로 사용하는 strcpy() 함수를 이용하면 된다.

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

int main()
{
    char str1[100] = "Copy!";
    char str2[100];
    
    strcpy(str2, str1);
    
    printf("%s\n", str1);
    printf("%s\n", str2);

    return 0;
}

이렇게 strcpy() 함수를 이용하면 문자열이 정상적으로 복사되는 것을 확인할 수 있다.


문자열 이어 붙이기

이번엔 다른 문자열 변수 2개를 이어 붙여 하나의 변수에 저장해 보도록 한다.

이 경우에는 strcat() 함수를 이용하여 두 문자열을 이어 붙일 수 있다.

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

int main()
{
    char str1[100] = "Copy ";
    char str2[100] = "Test!";
    
    strcat(str1, str2);
    
    printf("%s\n", str1);

    return 0;
}

문자열 비교

마지막으로 두 문자열을 비교하는 함수이다.

strcmp() 함수를 이용하여 문자열을 비교할 수 있다.

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

int main()
{
    char str1[100] = "abe";
    char str2[100] = "abc";
    
    printf("%d\n", strcmp(str1, str2));

    return 0;
}

비교는 ASCII 값을 기본으로 하여 비교를 진행한다.

str1 < str2의 경우 < 0 값, str1 > str2의 경우 < 0 값, str1 = str2의 경우 0을 반환한다.

 

왜 두 문자열이 다른 경우 왜 0보다 크거나 작은 값을 반환한다고 할까?

그 이유는 문자열에서 첫 문자부터 한 문자씩 비교를 하기 때문이다.

즉, 결과 값은 str1[0] - str2[0]이 값이 0이라면 str1[1] - str2[1] 이런 식으로 하여 모두 0인 경우 0을 반환하며, 하나라도 0이 아니라면 두 아스키값의 차를 반환해 준다.

 

strcmp() 함수에는 하나의 문제가 존재한다.

운영체제에 따라 함수의 결과가 다르게 동작한다는 것이다.

strcmp(str1, str2); 로 함수를 호출했다고 해보자

Window 운영체제의 경우 str1 - str2의 결과를 제공하므로 str1 < str2 인경우 < 0을 반환한다.

Linux 운영체제의 경우 str2 - str1의 결과를 제공하므로 str1 < str2 인경우 > 0을 반환한다.

이것을 잘 확인하여 사용해야 한다.