반응형
    
    
    
  C 언어 문자열 변환 함수 - strspn, strcspn
C 언어의 string.h 헤더에는 문자열을 다룰 수 있는 다양한 표준 라이브러리 함수들이 포함되어 있습니다. 오늘은 문자열에서 특정 문자 집합을 검색하는 두 가지 함수 strspn과 strcspn에 대해 살펴보겠습니다.
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. strspn과 strcspn의 차이점
| 함수 | 동작 방식 | 반환값 | 
|---|---|---|
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 결과: 6strspn(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 위치: 134.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결론
strspn과 strcspn은 문자열에서 특정 문자 집합을 기반으로 길이를 측정하는 유용한 함수입니다.
strspn은 주어진 문자 집합(accept)에 포함된 문자만 연속적으로 있는 부분의 길이를 반환strcspn은 특정 문자 집합(reject)이 등장하기 전까지의 길이를 반환
위 함수를 활용하면 문자열 분석 및 파싱을 쉽게 할 수 있습니다. C 언어에서 문자열 처리를 할 때 적극적으로 활용해 보세요!
반응형
    
    
    
  'c 언어 > c 표준 라이브러리(Standard C Library)' 카테고리의 다른 글
| C 언어 `string.h`의 문자열 숫자 변환 함수: `strtol`과 `strtod` (0) | 2025.02.16 | 
|---|---|
| C 언어 표준 라이브러리 `string.h` - 문자열을 숫자로 변환하는 함수 `atoi`, `atof` (0) | 2025.02.15 | 
| C 표준 라이브러리 `string.h`의 문자열 변환 함수 `strtok`, `strdup` (0) | 2025.02.13 | 
| C 언어 `string.h`의 문자열 검색 함수 - `strchr`와 `strstr` (0) | 2025.02.12 | 
| C 언어 문자열 비교 API - strcmp와 strncmp (0) | 2025.02.11 |