-
[배열] 문자열의 활용Stage/Computer Science 2021. 5. 27. 23:04
학습목표
문자열을 탐색하고 일부 문자를 수정하는 코드를 구현할 수 있다.
1. 문자열 탐색
- 사용자로부터 문자열을 입력받아 한 글자씩 출력하는 코드를 짜야 한다면 간단하게 for문을 이용해 문자열의 인덱스를 1씩 증가시켜나가면 된다.
1.1 문자열이 끝나는 인덱스는 어떻게 알 수 있을까?
해당 인덱스의 문자가 null 종단 문자와 일치하는지 검사하면 된다.
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 라이브러리 안에 포함돼있다.)
- 일일이 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 - 사용자로부터 문자열을 입력받아 한 글자씩 출력하는 코드를 짜야 한다면 간단하게 for문을 이용해 문자열의 인덱스를 1씩 증가시켜나가면 된다.