• 7. C - 문자열_Rev.F

    2021. 5. 26.

    by. 공상개발

    1. 문자열 길이 구하기

    문자열은 문자가 여러 개 모여있으므로 당연히 길이가 존재합니다.

    문자열의 길이를 구할 때 우리는 strlen 함수를 사용합니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <stdio.h>
    #include <string.h>    // strlen 함수가 선언된 헤더 파일
     
    int main()
    {
        char *s1 = "공상개발";       // 포인터에 문자열 "공상개발"의 주소 저장
        char s2[20= "공상개발";    // 크기가 20인 char형 배열을 선언하고 문자열 할당
     
        printf("%d\n", strlen(s1));    // strlen 함수로 문자열의 길이를 구함
        printf("%d\n", strlen(s2));    // strlen 함수로 문자열의 길이를 구함
     
        return 0;
    }
    cs

    # 한글은 2byte, 영어는 1byte

     

     

    2. 문자열 비교하기

    strcmp 함수를 사용하면 두 문자열이 같은지 비교할 수 있습니다.

    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
    #include <stdio.h>
    #include <string.h>    // strcmp 함수가 선언된 헤더 파일
     
    int main()
    {
        char s1[20];
        char s2[20];
     
        printf("문자열 두 개를 입력하세요: ");
        scanf("%s %s", s1, s2);
     
        int ret = strcmp(s1, s2);    // 입력된 문자열 비교
        printf("반환값: %d\n", ret);
     
        if (ret == 0)
        {
            printf("두 문자열이 같음\n");
        }
        else if (ret > 0)    // 양수일 때
        {
            printf("%s보다 %s가 큼\n", s2, s1);
        }
        else if (ret < 0)    // 음수일 때
        {
            printf("%s보다 %s가 큼\n", s1, s2);
        }
     
        return 0;
    }
    cs

     

    3. 문자열 복사하기

    문자열은 다른 배열이나 포인터(메모리)로 복사할 수 있습니다. 

    이때, strcpy 함수를 통해 문자열을 다른 곳으로 복사할 수 있습니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #define _CRT_SECURE_NO_WARNINGS    // strcpy 보안 경고로 인한 컴파일 에러 방지
    #include <stdio.h>
    #include <string.h>    // strcpy 함수가 선언된 헤더 파일
     
    int main()
    {
        char s1[15= "공상개발";    // 크기가 15인 char형 배열을 선언하고 문자열 할당
        char s2[15];              // 크기가 15인 char형 배열을 선언
     
        strcpy(s2, s1);        // s1의 문자열을 s2로 복사
        
        printf("%s\n", s2);    // 공상개발
        
    return 0;
    }
    cs

     

    4. 문자열 붙이기

    문자열은 strcat 함수를 사용하여 서로 붙일 수 있습니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #define _CRT_SECURE_NO_WARNINGS    // strcat 보안 경고로 인한 컴파일 에러 방지
    #include <stdio.h>
    #include <string.h>    // strcat 함수가 선언된 헤더 파일
     
    int main()
    {
        char s1[15= "공상";
        char s2[30= "개발"// s2 뒤에 붙일 것이므로 배열 크기를 크게 만듦
     
        strcat(s2, s1);        // s2 뒤에 s1를 붙임
     
        printf("%s\n", s2);    // 공
     
        return 0;
    }
    cs

     

    5. 문자열 검색하기

    # 문자열 안에서 문자로 검색하기

    문자열 검색은 포인터의 개념을 이해하고 있어야 돼서 넣지 않으려고 했지만 예습 차원으로 넣어봤습니다.

    strchr 함수를 사용하면 문자열에서 특정 문자로 검색할 수 있습니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #include <stdio.h>
    #include <string.h>    // strchr 함수가 선언된 헤더 파일
     
    int main()
    {
        char s[20= "tistory";  // 크기가 20인 char형 배열을 선언하고 문자열 할당
     
        char *temp = strchr(s, 't');     // 't'로 시작하는 문자열 검색, 포인터 반환
     
        while (temp != NULL)              // 검색된 문자열이 없을 때까지 반복
        {
            printf("%s\n", temp);         // 검색된 문자열 출력
            teno = strchr(temp + 1't');  // 포인터에 1을 더하여 a 다음부터 검색
        }
     
        return 0;
    }
    cs

     

    6. 문자열 자르기

    문자열을 자르는 함수는 strtok입니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #define _CRT_SECURE_NO_WARNINGS    // strtok 보안 경고로 인한 컴파일 에러 방지
    #include <stdio.h>
    #include <string.h>    // strtok 함수가 선언된 헤더 파일
     
    int main()
    {
        char s1[20= "공상 개발";  // 크기가 20인 char형 배열을 선언하고 문자열 할당
     
        char *temp = strtok(s1, " ");      // " " 공백 문자를 기준으로 문자열을 자름, 포인터 반환
     
        while (temp != NULL)               // 자른 문자열이 나오지 않을 때까지 반복
        {
            printf("%s\n", temp);          // 자른 문자열 출력
            temp = strtok(NULL" ");      // 다음 문자열을 잘라서 포인터를 반환
        }
     
        return 0;
    }
    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
    #define _CRT_SECURE_NO_WARNINGS    // strtok 보안 경고로 인한 컴파일 에러 방지
    #include <stdio.h>
    #include <string.h>    // strtok 함수가 선언된 헤더 파일
     
    int main()
    {
        char s[20= "공상 개발";    // 크기가 20인 char형 배열을 선언하고 문자열 할당
        char *sTemp[10= { NULL, };    // 크기가 10인 문자열 포인터 배열을 선언하고 NULL로 초기화
        int i = 0;                     // 문자열 포인터 배열의 인덱스로 사용할 변수
     
        char *temp = strtok(s1, " ");   // 공백 문자열을 기준으로 문자열을 자름
     
        while (temp != NULL)            // 자른 문자열이 나오지 않을 때까지 반복
        {
            sTemp[i] = temp;             // 문자열을 자른 뒤 메모리 주소를 문자열 포인터 배열에 저장
            i++;                       // 인덱스 증가
     
            temp = strtok(NULL" ");   // 다음 문자열을 잘라서 포인터를 반환
        }
     
        for (int i = 0; i < 10; i++)
        {
            if (sTemp[i] != NULL)           // 문자열 포인터 배열의 요소가 NULL이 아닐 때만
                printf("%s\n", sTemp[i]);   // 문자열 포인터 배열에 인덱스로 접근하여 각 문자열 출력
        }
     
        return 0;
    }
    cs

     

    'Language > C 튜터링' 카테고리의 다른 글

    8. C - 튜터링 프로젝트 결과물 _Rev.F  (0) 2021.05.26
    6. C - 배열  (0) 2021.05.17
    5. C - 함수_Rev.1  (0) 2021.05.06
    4. C - 반복문, 조건문 활용 문제  (0) 2021.04.09
    3. C - 조건문 & 반복문  (0) 2021.03.31

    댓글