728x90
반응형
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 결과: 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
결론
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 |