본문 바로가기

Programming/C

C 언어 | 문자열의 활용

✔ 학습목표

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

 

문자열의 길이 및 탐색

사용자로부터 문자열을 입력받아 한 글자씩 출력하는 프로그램을 만들어보자.

 

한 글자씩 출력해야 하기 때문에 출력에 있어서는 루프를 사용해야 할 것이다. 그렇다면 문자열의 끝은 어떻게 알 수 있을까? 한 가지 방법은 지난 강의에서 배운 대로 널 종단 문자(\0)를 이용하는 것이다. s라는 문자열이 있다고 할 때 for(int i = 0; s[i] != '\0'; i++){...} 과 같은 루프를 사용하는 것이 그 예이다. 

 

#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]);
    }
}

 

하지만 c에는 보다 간단한 방법이 존재한다. 바로 문자열의 길이를 알려주는 함수인 strlen()을 쓰는 것이다. 이는 string.h 라이브러리에 포함되어 있다. strlen() 함수를 사용하면 일일이 널 종단 문자를 검사하는 것 보다 효율적이다.

 

 

문자열 탐색 및 수정

사용자로부터 문자열을 입력받아 대문자로 바꿔주는 프로그램을 만들어보자.

 

#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");
}

 

위 예제에서는 사용자로 부터 문자열 s를 받고 strlen() 함수를 사용해 for 루프에서 출력한다. 이때 만약 문자가 대문자라면 소문자로 바꿔줘야 하기 때문에, if 문(for문 내)에서 ASCII 코드를 사용해 숫자 값으로 비교가 들어간다. 

 

* ASCII 코드에서 소문자와 대문자는 32씩 차이가 난다.

 

 

#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");
}

 

앞서 문자열의 길이를 알려주는 strlen() 함수의 경우처럼, 소문자를 대문자로 바꿔주는 함수 또한 존재한다. 이는 ctype 라이브러리에 toupper() 라는 함수로 정의되어 있다. 이를 사용하면 위처럼 간단하게 대문자 변환 프로그램을 작성할 수 있다. 

 

 

 

*이번 강의에서는 문자열을 활용하는 것도 중요하지만, string.h나 ctype.h와 같은 라이브러리에서 원하는 기능을 가진 함수를 찾아 사용할 수 있는지도 중요하다. 라이브러리나 함수는 구글에 검색하면 찾아낼 수 있다. 

 


 

이 글은 네이버 부스트 코스 David J. Malan(데이비드 J. 말란) 교수님의 모두를 위한 컴퓨터 과학(CS50 2019) 강의를 수강하고 작성한 글입니다. 본 강좌 내 실습에서는 CS50 Sandbox를 사용합니다.

 

 

모두를 위한 컴퓨터 과학 (CS50 2019)

부스트코스 무료 강의

www.boostcourse.org