ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [배열] 문자열의 활용
    Stage/Computer Science 2021. 5. 27. 23:04

    학습목표

    문자열을 탐색하고 일부 문자를 수정하는 코드를 구현할 수 있다.

    1. 문자열 탐색

    • 사용자로부터 문자열을 입력받아 한 글자씩 출력하는 코드를 짜야 한다면 간단하게 for문을 이용해 문자열의 인덱스를 1씩 증가시켜나가면 된다.

    1.1 문자열이 끝나는 인덱스는 어떻게 알 수 있을까?

    1. 해당 인덱스의 문자가 null 종단 문자와 일치하는지 검사하면 된다.

       for (int i = 0; s[i] != ‘\0’; i++) 
       { 
           ...
       } 

    2. strlen() 함수를 사용하면 된다.

       #include <cs50.h>
       #include <stdio.h>
       #include <string.h>
      
       int main(void)
       {
           string s = get_string("Input: ");
           printf("Output:\n");
           for (int i = 0, n = strlen(s); i < n; i++)
           {
               printf("%c\n", s[i]);
           }
       }
      • strlen은 문자열의 길이를 알려주는 함수이다. (string.h 라이브러리 안에 포함돼있다.)
      • 일일이 null 종단 문자인지 검사하는 것보다 훨씬 효율적이다.

    2. 문자열 수정

    사용자로부터 문자열을 입력받았다고 가정하고 이 문자열을 대문자로 바꿔주는 코드를 작성해보자.

    #include <cs50.h>
    #include <stdio.h>
    #include <string.h>
    
    int main(void)
    {
        string s = get_string("Before: ");
        printf("After:  ");
        for (int i = 0, n = strlen(s); i < n; i++)
        {
            if (s[i] >= 'a' && s[i] <= 'z')
            {
                printf("%c", s[i] - 32);
            }
            else
            {
                printf("%c", s[i]);
            }
        }
        printf("\n");
    }
    • 사용자에게 문자를 입력받고 이 문자가 'a'보다 크고 'z'보다 작은지 검사한다.(소문자인지 검사)

    • 문자 간 대소비교가 가능한 이유는 ASCII 코드를 떠올려보자.

    • 대문자 A는 65, B는 66 ....

    • ASCII 표를 보면 알파벳 소문자와 대문자 간은 숫자 32만큼 차이가 나는 것을 확인할 수 있다.

    • 따라서 알파벳 소문자는 그 소문자 - 32를 계산하면 그 연산 결과 값에 해당하는 대문자가 나온다.

    • 이와 동일한 작업을 수행하는 toupper() 함수도 참고해서 살펴보자. (ctype 라이브러리에 있다.)

        #include <cs50.h>
        #include <ctype.h>
        #include <stdio.h>
        #include <string.h>
      
        int main(void)
        {
            string s = get_string("Before: ");
            printf("After:  ");
            for (int i = 0, n = strlen(s); i < n; i++)
            {
                printf("%c", toupper(s[i]));
            }
            printf("\n");
        }



    'Stage > Computer Science' 카테고리의 다른 글

    [알고리즘] 알고리즘 표기법  (0) 2021.05.29
    [알고리즘] 검색 알고리즘  (0) 2021.05.29
    [배열] 문자열과 배열  (0) 2021.05.27
    [배열] 배열  (0) 2021.05.27
    [배열] 디버깅  (0) 2021.05.27

    댓글