[CS50] 배열 - 문자열의 활용

TIL

문자열 길이 구하기

문자열에서 문자를 검색하거나 특정 문자를 바꾸려면 어떻게 해야 할까?

 

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

 

for 루프로 문자열의 인덱스를 하나씩 증가시키면 되는데, 문자열의 끝은 어떻게 알 수 있을까?

한 가지 방법은 널 종단 문자 \0와 일치하는지 검사하는 것이다.

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

 

하지만 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 라이브러리에 포함되어 있다. 변수 n에 문자열 길이를 저장하고, 그만큼만 루프를 순환한다.

 

대문자 변환

수동 변환

사용자로부터 문자열을 입력받아 대문자로 바꾸는 프로그램을 작성해보자.

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

문자열 길이만큼 루프를 돌며 각 문자가 소문자인지 검사한다. 문자의 대소 비교가 가능한 이유는 ASCII 코드의 숫자값으로 비교할 수 있기 때문이다.

 

알파벳의 소문자와 대문자는 ASCII 값이 32만큼 차이 난다. 따라서 소문자에서 32를 빼면 대문자가 된다.

 

toupper 함수

ctype 라이브러리의 toupper() 함수를 사용하면 간단하게 대문자 변환 프로그램을 작성할 수 있다.

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

'TIL' 카테고리의 다른 글

[CS50] 알고리즘 - 검색 알고리즘  (0) 2025.11.06
[CS50] 명령행 인자  (0) 2025.11.06
[CS50] 배열 - 문자열과 배열  (0) 2025.11.06
[CS50] 배열  (0) 2025.11.05
[CS50] 디버깅  (0) 2025.11.05
'TIL' 카테고리의 다른 글
  • [CS50] 알고리즘 - 검색 알고리즘
  • [CS50] 명령행 인자
  • [CS50] 배열 - 문자열과 배열
  • [CS50] 배열
고견
고견
개발 자국 남기기
  • 고견
    개발자국
    고견
  • 전체
    오늘
    어제
    • 분류 전체보기 (157) N
      • Frontend (29)
        • Next.js (16)
        • JavaScript (7)
      • CS (19) N
        • 자료구조 (9)
        • 알고리즘 (5)
        • 운영체제 (4) N
        • 네트워크 (1) N
      • TIL (93)
      • Dev Log (16)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    App Router
    ai 감성 일기장
    useState
    CS
    cs50
    타입 좁히기
    algorithm
    javascript
    페이지 라우터
    react
    문자열
    바닐라 자바스크립트
    앱 라우터
    함수 타입
    Next.js
    인터페이스
    Trouble Shooting
    자료구조
    generic
    Pages Router
    emotion diary
    알고리즘
    C
    클래스
    memory
    배열
    typescript
    제네릭
    트러블 슈팅
    Spa
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
고견
[CS50] 배열 - 문자열의 활용
상단으로

티스토리툴바