CS 기초/C언어

[CS50] 문자열

담크 2021. 7. 29. 13:13

모든 언어가 그렇듯 문자열을 다루기 위해서는 문자열 형식을 가진 변수부터 선언해줘야 합니다.

오늘은 사용자로부터 문자열을 입력받고 입력받은 문자열을 다른 문자열과 합쳐서 출력하는 프로그램을 작성해보겠습니다.

 

혹시나 실습이 필요하신분들은 

https://sandbox.cs50.io/

 

CS50 Sandbox

Temporary programming environments for students and teachers.

sandbox.cs50.io

여기서 바로 create눌러서 시작하시면 실습하기 수월합니다.

 

 

 

이렇게 만들어진 스크래치 블록이 있다고 한다면 C로는 어떻게 표현해야 할까요?

지난 포스팅에 say는 printf와 같은 역할을 한다고 공부했습니다. 그렇다면 ask는 어떨까요?

ask함수를 C로 가져왔을 때 가장 비슷한 것은 get_string 함수입니다.

String은 프로그래밍 언어에서 단어나, 구절, 문장을 나타내는 말입니다.

string answer = get_string("What`s your name?"); => ask (What`s your name?) and wait 부분과 같다고 할 수 있습니다.

여기서 answer은 변수로 임의로 정해준 것일 뿐 zzz나 xxx같이 임의로 지정하는 것이 가능합니다.

(단 int, string같이 C에서 사용하는 예약어의 경우는 변수로 사용할 수 없습니다.)

또한 변수가 저장하는 데이터의 종류를 아주 정확하게 명시해줘야 합니다. 그래서 위의 보기의 경우 저장하고자 하는 값의 종류가 문자열이기 때문에 string을 사용해서 명시해준 것입니다.

 

위의 식에서 =를 사용했는데 우리가 일반적으로 사용하는 =의 뜻은 왼쪽 식과 오른쪽 식이 같다 라는 것을 의미합니다.

하지만 프로그래밍 언어의 경우 오른쪽에서 왼쪽으로 가는 화살표와 비슷하다고 생각해주시면 됩니다.

이를 할당 연산자라고 하는데 오른쪽에 있는 것을 왼쪽에 지정한다 라는 의미입니다.

 

그렇다면 위의 퍼즐을 C로 나타내 본다면

    string answer = get_string("What`s your name?\n");
    printf("hello answer");

로 쓰면 될까요??

 

이 코드를 그대로 실행한다면 hello answer이 그대로 결과로 출력될 겁니다.

 

answer이라는 변수에 들어있는 이름을 출력해야 하기 때문에 이 경우에는 %를 써줘야 합니다.

이때 문자열을 받아주기 때문에 string의 s를 붙여 %s라고 사용합니다.

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

int main(void){
    string answer = get_string("What`s your name?\n");
    printf("hello %s\n", answer);
}

(\n : 커서를 다음 줄로 이동시켜주는 명령어(Enter의 역할) )

실행결과를 보면

이렇게 됩니다.

 

지난 포스팅에서도 설명했듯이 코드를 실행하기 전에는 컴파일을 먼저 해줘야 합니다.

$ clang -o string string.c -lcs50

우선 파일의 이름을 string으로 지정을 해주고(안 해주면 a.out으로 나옵니다.)

-lcs50은 "link"라는 의미를 지닌 -l과 cs50이라는 파일을 합친 것입니다. 이를 통해서 컴파일 시 cs50 파일을 연결하도록 해줍니다.

 

 

 

** 위의 경우 대신 make명령어를 써주면 간단하게 컴파일이 가능합니다.

$ make string

 


출처

본 내용은 CS50의 2019년 강의를 듣고 작성했습니다. (개념이 어느 정도 정리되면 최신강의도 다시 듣고 수정할 내용 있으면 수정하겠습니다.)

 

강의 자료는 EdX에서 무료로 사용할 수 있고 boostcourse에서 한글 강의로도 들을 수 있습니다.

'CS 기초 > C언어' 카테고리의 다른 글

[CS50] 하드웨어의 한계  (0) 2021.08.03
[CS50] 사용자 정의 함수, 중첩 루프  (0) 2021.08.02
[CS50] 자료형, 형식 지정자, 연산자  (2) 2021.08.01
[CS50] 조건문과 루프  (0) 2021.07.30
[CS50] C 기초  (0) 2021.07.28