[This is CS50 2024] After Week2 - 배열 #N0 V0w3ls

moonstrnck·2024년 1월 25일

CS50

목록 보기
5/13


[CS50 Practice - #NO VOWELS]

N0 V0w3ls

Learning Goals

  • 문자열 사용 연습
  • 명령행 인자 사용 연습
  • 완전히 처음부터 프로그램 작성

Background

인터넷에 접속해 본 적이 있다면 "leetspeak"(또는 우리의 목적에 따라 "l33tsp36k"!)를 본 적이 있을 것입니다. 여기에는 알파벳 문자를 기호로 대체하는 작업이 포함되며, 이러한 기호는 알파벳 문자와 다소 유사합니다. 이 실습에서는 특정 모음을 숫자로 바꾸는 프로그램을 작성합니다!

지금까지 배포 코드가 제공되는 프로그램을 자주 작성했습니다. 이 문제에 대한 "distro"를 다운로드할 때 일반적으로 사용되는 몇 가지 라이브러리와 빈 기본 기능만으로 시작한다는 것을 알 수 있습니다. 이번 문제에서는 명령줄에 입력할 단어를 모음 대신 숫자가 붙은 해당 단어로 변환해 보겠습니다.

Hints

  • 배포 코드의 주요 기능은 argc 및 argv를 사용합니다. 이것들을 꼭 사용해 보세요!
  • 주 함수에서 다른 작업을 수행하기 전에 명령행 인자의 개수가 올바른지 확인하세요.

Demo

Getting Started

  1. GitHub 계정을 사용하여 cs50.dev에 로그인합니다.
  2. 터미널 창 내부를 클릭하고 cd를 실행합니다.
  3. $ 프롬프트에서 mkdir no-vowels를 입력합니다.
  4. 이제 CD no-vowels을 실행하세요.
  5. 그런 다음 wget https://cdn.cs50.net/2022/fall/labs/2/no-vowels.c 를 터미널에 복사하여 붙여넣어 이 랩의 배포 코드를 다운로드하세요.

Implementation Details

  • no-vowels라는 디렉터리에 있는 no-vowels.c라는 파일에 프로그램을 구현하세요.
  • 프로그램은 변환하려는 단어가 될 단일 명령행 인자를 허용해야 합니다.
  • 명령행 인자 없이 또는 두 개 이상의 명령행 인자를 사용하여 프로그램이 실행되는 경우, 여러분의 프로그램은 여러분이 선택한 오류 메시지(printf 사용)를 인쇄하고 main에서 즉시 1(오류를 나타내는 경향이 있음) 값을 반환해야 합니다.
  • 프로그램에는 string 입력을 받아 string 출력을 반환하는 replace라는 함수가 포함되어 있어야 합니다.
  • 이 함수는 다음 모음을 숫자로 변경합니다. a는 6, e는 3, i는 1, o는 0이 되고 u는 변경되지 않습니다.
  • replace 함수의 입력 매개변수는 argv[1]이고 반환 값은 변환된 단어입니다.
  • 그런 다음 주 함수는 변환된 단어를 인쇄하고 그 뒤에 \n이 표시됩니다.
  • replace 함수에서 스위치 문을 사용해 볼 수도 있습니다.

생각해보기

get_string, get_int 등이 아닌 명령행 인자를 사용하려는 이유는 무엇일까요?

나의 풀이

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

string replace(char word[]);

int main(int argc, string argv[])
{
    if (argc == 1 || argc > 2)
    {
        printf("Usage: ./no-vowels word\n");
        return 1; // error
    }
    else
    {
        printf("%s\n", replace(argv[1]));
        return 0;
    }
}

string replace(char word[])
{
    // a e i o u
    // 6 3 1 0 u

    for (int i = 0; word[i] != '\0'; i++)
    {
        switch (word[i])
        {
            case 'a':
                word[i] = '6';
                break;
            case 'e':
                word[i] = '3';
                break;
            case 'i':
                word[i] = '1';
                break;
            case 'o':
                word[i] = '0';
                break;
        }
    }

    return word;
}

~~ 주의점 ~~

  1. replace 함수의 매개변수는 문자열(string)이어야 한다. (배열이 아닐 경우 입력받은 문자를 for문으로 순차 탐색할 수 없음)
  2. 문자열 선언 방식에는 배열 or 포인터 두 가지 방법이 있다.
  3. char형 포인터는 문자열 내용을 변경하는 것이 불가능 하다.
  4. switch문에서 해당 case만 실행하고 싶을 때 break를 이용한다.

char형 배열과 char형 포인터

매개변수로 문자열을 받는다는 것을 확실히 하기 위해서는 매개변수 뒤에 [] 대괄호를 붙여주면 된다. 대괄호 안에 들어가는 배열의 크기는 생략한다.

#include <stdio.h>

string chararray(char s1[])    // char 배열 매개변수 지정, 크기 생략
{
    printf("Hello, %s\n", s1);    // Hello, 와 매개변수를 조합하여 문자열 출력
}


string charpointer(char *s1)    // char포인터 매개변수 지정
{
    printf("Hello, %s\n", s1);    // Hello, 와 매개변수를 조합하여 문자열 출력
}
					char형 배열		char형 포인터
가리키는 위치 변경			불가능			가능
문자열 내용을 변경			가능				불가능

0개의 댓글