포스트(post)

11. 숫자를 문자열로 변경하기 - (itoa), (rtos)

목표

숫자를 문자열로 변경하는 (itoa)함수와 (rtos)함수를 사용 해 봅시다.



숫자와 문자열의 차이점

사람이 보기에는 숫자 123과 문자열 "123"이 동일 해 보여도, 컴퓨터는 숫자와 문자열을 전혀 다른 데이터로 취급합니다. 숫자가 필요한 함수에 문자열을 주거나, 혹은 문자열이 필요한 함수에 숫자를 주게 되면 오류가 발생하게 됩니다.

따라서 문자열이 필요한 함수에 숫자를 입력하고 싶을 때는, 그 숫자를 문자열로 변경하는 함수들을 사용해야 합니다.



itoa & rtos

숫자에는 소숫점이 없는 정수와 소숫점이 포함되어 있는 실수 2가지가 있죠 그 중 정수를 문자열로 변환하는 함수는 (itoa)이고, 실수를 문자열로 변환하는 함수는 (rtos)입니다.

itoaInteger TO Alphabet의 약자이고, rtosReal TO String의 약자입니다. 두 함수 모두 결국 문자열로 변환하는건데, 직관적이지 않은 이름이 아쉽긴 하지만 어쩌겠습니까(ㅜㅜ)

정수는 실수에 포함되기 때문에 (rtos) 함수로 정수 또한 문자열로 변경할 수 있지만, (itoa)함수로는 실수를 문자열로 변경할 수 없습니다.



날짜와 온도를 출력 해 봅시다

문자열을 하나로 합치는 함수로는 (strcat)함수를 사용할 수 있습니다. 하지만 (strcat)은 숫자는 입력받지 못합니다. 따라서 숫자를 (strcat)으로 변환하기 위해서는 각 숫자를 문자열로 변환해야 합니다. (getint)함수와 (getreal)함수로 숫자를 입력받은 후, 그 숫자들을 문자열로 변환하여 (strcat)함수로 하나의 문자열로 만들겠습니다.

1
2
3
4
5
6
7
8
(progn
	(setq month (getint "\n오늘은 몇 월인가요? : "))
	(setq date (getint "\n오늘은 몇 일인가요? : "))
	(setq temperature (getreal "\n현재 온도를 입력 해 주세요 : "))
	(setq msg (strcat "\n오늘은 " (itoa month) "월" (itoa date) "일이며, 현재 온도는 " (rtos temperature) "도 입니다!"))
	(princ msg)
	(princ)
)
  1. (getint)(getreal)함수로 날짜와 온도를 입력받아 각각의 변수에 저장합니다.
  2. (strcat)함수로 각 문자열들을 하나의 문자열로 만들어 msg변수에 저장합니다. 이 때 숫자들을 (itoa)(rtos)함수를 이용해 문자열로 변환하여 (strcat)함수에 집어넣습니다.
  3. (princ)함수로 생성한 문자열을 명령어 창에 출력합니다.