strchr strstr 문자 위치 찾기

strchr strstr 문자 위치 찾기


이번에는 문자, 문자열 위치 찾는 함수를 알아보자.

strchr strstr 함수를 사용하기 위해서는 string.h 파일을 include 해야 된다.

strchr strstr 함수는 메모리 주소를 반환을 해주고 문자, 문자열을 찾아주는 함수이다.

사용법을 한번 보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <string.h>
main()
{
    char array1[50= "Good-morning, Good-afternoon, Good-evening";
    char array2[10= "morning";
    char *p1 = NULL*p2 = NULL;
 
    p1 = strchr(array1, 'a');
    p2 = strstr(array1, array2);
 
    printf("문자 a의 위치 ; %x \n", p1);
    printf("문자열 : %s\n", p1);
    printf("문자열의 시작 위치 : %x\n", p2);
    printf("문자열 : %s \n", p2);
}
cs

< 출력 >
문자 a의 위치 ; 10ff98f
문자열 : afternoon, Good-evening
문자열의 시작 위치 : 10ff981
문자열 : morning, Good-afternoon, Good-evening

먼저 string.h 파일을 include 해주고 포인터 변수 2개를 만든다.
p1에는 array1에 a 문자를 찾아주고 a의 시작 주소를 p1에게 반환한다.
p2에는 array1의 array2안에 있는 문자열을 array1에서 찾아주고 문자열 시작 주소를 p2에게 넣어준다.
사용법은 이러하다.

그럼 이런 함수들이 어떻게 동작을 하는지 함수의 구현된 것을 보자.

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
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>
char* strchr_my(const char *s, int c)
{
    char *cp = (char*)s;
    while (*cp) {
        if (*cp == c)
            return cp;
        cp++;
    }
    return NULL;
}
char* strstr_my(const char *s1, const char *s2)
{
    char *sp = (char*)s1;
    char *sp1, *sp2;
    if (!*s2) return (char*)s1;
    while (*sp) {
        sp1 = sp;
        sp2 = (char*)s2;
        while (*sp1 && *sp2 && !(*sp1 - *sp2))
            sp1++, sp2++;
        if (!*sp2) return sp;
        sp++;
    }
    return NULL;
}
main()
{
    char array1[50= "Good-morning, Good-afternoon, Good-evening";
    char array2[10= "morning";
    char *p1, *p2;
 
    p1 = strchr_my(array1, 'a');
    p2 = strstr_my(array1, array2);
 
    printf("문자 a의 위치 ; %x \n", p1);
    printf("문자열 : %s\n", p1);
    printf("문자열의 시작 위치 : %x\n", p2);
    printf("문자열 %s\n", p2);
}
cs

맞춤법 검사를 원하는 단어나 문장을 직접 입력 또는 붙여 넣기구현은 이렇게 된다.
설명을 하자면 strchr부터 보자. 첫 번째에 s를 char*로 강제 형 변환을 해줬다. 이유는 const 키워드를 지우기 위해서였다.
프로그래머는 의도한 동작을 의미하기 위해 캐스팅을 해줬다.
그리고 cp가 '\0'을 만날 때까지 반복문을 돌려준다. 반복문을 돌릴 때 cp와 c가 같다면 현재 cp의 위치 주소를 반환한다.

그리고 strstr 설명을 해보자.
이 함수도 마찬가지로 처음에 const 키워드를 지워준다.
그리고 포인터 변수에 sp, const 키워드 지워준 s 2를 넣어준다.
그 후에는 소스코드 보고 해석하면 이해가 될 것이다.
strchr strstr에 대해서 알아보았다.

댓글

Designed by JB FACTORY