배열 (2)

khxxjxx·2021년 4월 13일
0

강좌 : 부스트캠프 모두를 위한 컴퓨터과학(cs50 2019)

3. 배열

✍문자열과 배열

널문자, 널종단문자

  • \0 : 문자열의 끝을 나타낸다
  • 8비트가 모두 0인 상태를 의미

"문자열"이 아닌 '문자'로 printf 할 수도 있다

string names[4];

names[0] = "EMMA";
names[1] = "RODRIGO";
names[2] = "BRIAN";
names[3] = "DAVID";

printf(%s\n",names[0]);
// names[0][0] : names[0]의 0번째 값 = E
printf(%c%c%c%c\n",names[0][0],names[0][1],names[0][2],names[0][3]);
++ 두개의 printf값은 동일하다

✍문자열의 활용

문자열의 길이 및 탐색

  • 사용자로부터 문자열을 입력받아 한 글자씩 출력
  • 널종단문자와 일치하는지 검사하는 방법
    for(int i = 0; s[i] !='\0'; i++)
  • strlen() 함수 사용하는 방법
    for(int i = 0, n=strlen(s); i<n; i++)

strlen()은 문자열의 길이를 알려주는 함수로 string.h 라이브러리 안에 포함
!= : 두 연산자의 값이 같지 않은지를 비교하는 연산자

완성

#include<stdio.h>
#include<cs50.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++)  // for(int i = 0; s[i] !='\0'; i++)
    {
    	printf("%c\n",s[i]);
    }
}

문자열 탐색 및 수정

  • 사용자로부터 문자열을 입력받아 소문자를 대문자로 변환
  • 대문자와 소문자의 ASCII값 차이로 하는 방법(32차이)
    printf("%c",s[i]-32);
  • toupper() 함수 사용하는 방법
    printf("%c",toupper(s[i]));

toupper()은 소문자를 대문자로 변환해주는 함수로 cytpe.h 라이브러리 안에 포함

완성

// 대문자와 소문자의 ASCII값 차이로 하는 방법
#include<stdio.h>
#include<cs50.h>
#include<string.h>

int main(void)
{
    string s = get_string("Before: ");  // 사용자의 값을 s에 불러오고
    printf("After: ");
    for (int i = 0, n=strlen(s); i<n; i++)  // 문자열의 길이만큼 반복
    {
        if(s[i]>='a'&& s[i]<='z')  // 'a'보다크다 'z'보다 작으면
        {
            printf("%c",s[i]-32);  // 32값을 뺀후 문자형태로 출력
        }
        else
        {
            printf("%c",s[i]);
        }
    }
    printf("\n");
}
// toupper() 함수 사용하는 방법
#include<stdio.h>
#include<cs50.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");
}

✍명령행 인자

  • int main(int argc, string argv[])
  • argc: main 함수가 받게 될 입력의 갯수
  • argv[] : 그 입력이 포함되어 있는 배열
  • 배열은 변수뒤에 [] 대괄호를 붙이고 객체는 {} 중괄호로 묶는다
  • 명령행 인자는 실행하고자 하는 프로그램 뒤에 적는다

완성

#include<cs50.h>
#include<stdio.h>

int main(int argc, string argv[])
{
    if(argc==2)
    {
        printf("hello, %s\n",argv[1]);
    }
    else
    {
        printf("hello, world\n");
    }
}
  • 프로그램을 명령행에서 실행하므로 입력은 문자열로 주어진다 따라서 argv[]는 string배열이 된다
  • (argc==2)인 이유 : argv[0]는 기본적으로 프로그램의 이름으로 저장된다 따라서 하나의 입력이 더 주어진다면 argv[1]에 저장된다
profile
코린이

0개의 댓글