strcspn 문자열 중에서 일치되는 첫 문자의 위치 구하기


strcspn 문자열 중에서 일치되는 첫 문자의 위치 구하기

이번에는 strcspn 함수에 대해서 알아보겠다.

strcspn 함수를 사용하려면 string.h 파일을 include 해야된다.

함수의 원형을 보면


1
unsigned int strcspn(const char *stringconst char *strCharSet);
cs


이라고 나와있다. 사용법을 보자.


1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <string.h>
main()
{
    char *str = "aossuper8.tistory.com";
    char *strChar = "!@#$%^&*()_+.?>";
    unsigned int pos;
 
    pos = strcspn(str, strChar);
 
    printf("%d 위치에서 일치되는 첫 문자를 발견하였습니다.\n", pos);
}
cs

< 출력 >


사용법은 첫 번째 인자에 비교할 문자열을 넣고 두 번째 인자에 검색할 문자 집합을 넣는거다.
두 번째 인자에 하나라도 일치하는게 있으면 그 위치를 반환해준다.
함수 반환값은 그 위치 값을 반환해준다.

그럼 함수가 어떻게 돌아가는지 구현을 해보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
unsigned int strcspn_my(const char *stringconst char *strCharSet)
{
    const char *temp;
    unsigned int n = 0;
    while (*string) {
        temp = strCharSet;
        while (*temp) {
            if (*string == *temp)
                return n;
            temp++;
        }
        n++;
        string++;
    }
    return n;
}
main()
{
    char *str = "aossuper8.tistory.com";
    char *strChar = "!@#$%^&*()_+.?>";
    // char str[] = "aossuper8.tistory.com";
    // char strChar[] = "!@#$%^&*()_+.?>";
    // 이렇게 사용해도 됨.
    unsigned int pos;
 
    pos = strcspn_my(str, strChar);
 
    printf("%d 위치에서 일치되는 첫 문자를 발견하였습니다.\n", pos);
}
cs

7행을 보면 코드를 보면 일단 temp 포인터 변수에 strCharSet 변수의 주소를 넣어준다. 이유는?? 11행에 보면 계속 ++를 해주고 있다.
그림을 보면 이렇다.

strChar 값이 이렇게 하나하나 다 비교해보는 것이다. 그렇기 때문에 8행에 있는 반복문이 끝나고 나면 strCharSet 변수 위치는 지금 > 에 있을것이다.

그렇기 때문에 다시 ! 위치로 돌리기 위해서 7행에서 ! 위치를 넣어주는 것이다.

이정도면 코드가 이해 됬을것이다.

댓글

Designed by JB FACTORY