문자열의 길이 및 탐색
사용자로부터 문자열을 입력받아 한 글자씩 출력하는 프로그램을 만들기
For 루프를 통해 문자열의 인덱스를 하나씩 증가시켜가면서 해당하는 문자를 출력하면 됨
#include <stdio.h>
int main(void)
{
string s = get_string("Input: ");
print("Output: ");
for(int i = 0, ???, i++)
{
printf("%c", s[i]);
}
print("\n");
}
for 루프에서 조건은 문자열의 길이만큼 나와야 함. 그래서 ???조건에서는 i가 문자열의 길이보다 작아야 함 이때 strlen()이라는 함수를 사용할 수 있음! strlen은 문자열의 길이를 알려주는 함수로 <string.h> 라이브러리에 포함되어 있음
<string.h>를 포함하지 않으면 컴파일할 때 clang은 strlen함수의 존재 여부를 모르기 때문에 에러가 발생!
#include <cs50.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
string s = get_string("Input: ");
printf("Output: ");
for(int i=0;i<strlen(s);i++)
{
printf("%c",s[i]);
}
printf("\n");
}
결과는 잘 나온다!
하지만 for 루프의 가운데 있는 조건문은 질문을 나타내는 불리언 표현으로 계속해서 물어보고 확인하는 것을 반복함
이것을 해결하기 위해서 n이라는 변수에 strlen() 함수를 넣기!
string s = get_string("Input: ");
printf("Output: ");
int n = strlen(s)
for(int i=0;i<n;i++)
이렇게 루프에서 한 번만 물어보고 계속 사용하려는 값이 있다면 for문 한 줄 안에 써도 됨!
#include <cs50.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
string s = get_string("Input: ");
printf("Output: ");
for(int i=0,n=strlen(s);i<n;i++)
{
printf("%c",s[i]);
}
printf("\n");
}
문자열의 길이 및 탐색
사용자로부터 문자열을 입력받아 소문자이면 대문자로 바꿔주는 프로그램을 작성!
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')
{
//convert to uppercase
}
else
{
printf("%c",s[i]);
}
}
printf("\n");
}
- 먼저 사용자로부터 입력받은 문자를 s라는 변수에 저장
- 그리고 s의 길이만큼 for 루프를 돌면서 각 인덱스에 해당하는 문자가 'a'보다 크고 'z'보다 작은 지 검사함 == 소문자인지 검사하는 것(a부터 z까지 소문자인가? 그렇다면 대문자로 바꿔라!, 만약 대문자이면 그대로 출력!)
- //convert to uppercase를 채워 넣어야 함
#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() 함수를 사용할 수 있음!
#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <ctype.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");
}
- toupper() 함수는 소문자를 대문자로 바꿔주는 기능을 함 <ctype.h> 라이브러리에 있음
- 이미 만들어져 있는 toupper 함수를 사용하면 간단하게 대문자 변환 프로그램을 작성할 수 있음
https://www.boostcourse.org/cs112/joinLectures/41307
'cs > CS50' 카테고리의 다른 글
4: 알고리즘-1(검색 알고리즘) (0) | 2021.11.29 |
---|---|
3: 배열-6(명령행 인자:command-line arguments) (0) | 2021.11.28 |
3: 배열-4(문자열과 배열) (0) | 2021.11.27 |
3: 배열-3(메모리와 배열:전역변수) (0) | 2021.11.25 |
3: 배열-2(버그와 디버그) (0) | 2021.11.25 |