문자열 길이 구하기
문자열에서 문자를 검색하거나 특정 문자를 바꾸려면 어떻게 해야 할까?
사용자로부터 문자열을 입력받아 한 글자씩 출력하는 프로그램을 만들어보자.
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 |
