c 언어/c 표준 라이브러리(Standard C Library)

C 언어 문자열 변환 함수 - strspn, strcspn

임베디드 친구 2025. 2. 14. 10:11
728x90
반응형

C 언어의 string.h 헤더에는 문자열을 다룰 수 있는 다양한 표준 라이브러리 함수들이 포함되어 있습니다. 오늘은 문자열에서 특정 문자 집합을 검색하는 두 가지 함수 strspnstrcspn에 대해 살펴보겠습니다.

1. strspn 함수

strspn 함수는 주어진 문자열에서 특정 문자 집합만을 연속적으로 포함하는 부분의 길이를 반환합니다.

함수 원형

#include <string.h>
size_t strspn(const char *str, const char *accept);

매개변수 설명

  • str: 검사할 대상 문자열
  • accept: 허용할 문자들의 집합

반환값

  • str의 처음부터 시작하여 accept에 포함된 문자로만 이루어진 연속된 부분의 길이를 반환
  • 만약 str의 첫 번째 문자가 accept에 포함되지 않는다면 0을 반환

예제 코드

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

int main() {
    char str[] = "123abc456";
    char accept[] = "1234567890"; // 숫자만 허용

    size_t length = strspn(str, accept);

    printf("문자열에서 처음 연속된 숫자의 길이: %zu\n", length);
    return 0;
}

실행 결과

문자열에서 처음 연속된 숫자의 길이: 3

위 코드에서 strspn 함수는 str 문자열의 처음부터 accept 문자열에 포함된 문자(숫자)만을 연속적으로 찾아 길이를 반환합니다. "123abc456"에서 처음 연속된 숫자는 "123"이므로 3을 반환합니다.


2. strcspn 함수

strcspn 함수는 주어진 문자열에서 특정 문자 집합이 처음 등장하기 전까지의 길이를 반환합니다.

함수 원형

#include <string.h>
size_t strcspn(const char *str, const char *reject);

매개변수 설명

  • str: 검사할 대상 문자열
  • reject: 포함되면 안 되는 문자들의 집합

반환값

  • str의 처음부터 시작하여 reject에 포함된 문자가 처음 등장하기 전까지의 길이를 반환
  • 만약 reject에 포함된 문자가 str에 존재하지 않으면 str의 전체 길이를 반환

예제 코드

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

int main() {
    char str[] = "hello, world!";
    char reject[] = " ,!"; // 공백, 콤마, 느낌표가 등장하기 전까지 검사

    size_t length = strcspn(str, reject);

    printf("문자열에서 공백이나 특수문자가 등장하기 전까지의 길이: %zu\n", length);
    return 0;
}

실행 결과

문자열에서 공백이나 특수문자가 등장하기 전까지의 길이: 5

위 코드에서 strcspn 함수는 str 문자열에서 reject에 포함된 문자가 처음 등장하는 위치까지의 길이를 반환합니다. "hello, world!"에서 공백(스페이스)이 처음 등장하는 위치는 5번째이므로 5를 반환합니다.


3. strspnstrcspn의 차이점

함수 동작 방식 반환값
strspn 문자열이 특정 문자 집합(accept)에 포함된 문자로 연속된 길이 측정 허용된 문자만 연속된 길이 반환
strcspn 문자열이 특정 문자 집합(reject)을 만나기 전까지의 길이 측정 거부할 문자가 나오기 전까지의 길이 반환

예제 비교

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

int main() {
    char str[] = "abcdef123";
    char accept[] = "abcde";
    char reject[] = "123";

    printf("strspn 결과: %zu\n", strspn(str, accept));
    printf("strcspn 결과: %zu\n", strcspn(str, reject));

    return 0;
}

실행 결과

strspn 결과: 5
strcspn 결과: 6
  • strspn(str, accept): "abcdef123"에서 처음 연속된 "abcde" 부분이 accept에 포함되므로 길이 5 반환
  • strcspn(str, reject): "abcdef123"에서 "123" 중 첫 번째 등장하는 문자는 6번째 위치이므로 길이 6 반환

4. 활용 예시

4.1 문자열에서 처음 등장하는 숫자 찾기

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

int main() {
    char str[] = "The price is 42 dollars.";
    char digits[] = "0123456789";

    size_t pos = strcspn(str, digits);

    if (pos < strlen(str)) {
        printf("첫 번째 숫자는 %c 위치: %zu\n", str[pos], pos);
    } else {
        printf("문자열에 숫자가 없습니다.\n");
    }
    return 0;
}

실행 결과

첫 번째 숫자는 4 위치: 13

4.2 문자열에서 연속된 영문자의 길이 찾기

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

int main() {
    char str[] = "Hello123World";
    char letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

    size_t length = strspn(str, letters);

    printf("연속된 영문자의 길이: %zu\n", length);
    return 0;
}

실행 결과

연속된 영문자의 길이: 5

결론

strspnstrcspn은 문자열에서 특정 문자 집합을 기반으로 길이를 측정하는 유용한 함수입니다.

  • strspn은 주어진 문자 집합(accept)에 포함된 문자만 연속적으로 있는 부분의 길이를 반환
  • strcspn은 특정 문자 집합(reject)이 등장하기 전까지의 길이를 반환

위 함수를 활용하면 문자열 분석 및 파싱을 쉽게 할 수 있습니다. C 언어에서 문자열 처리를 할 때 적극적으로 활용해 보세요!

반응형