1. 기본 dictionary 읽고 구조체 배열
로 파싱하기
open
명령어로 fd, file discriptor
를 연다
- 0 : 표준 입력, 1 : 표준 출력 (write 함수 쓸 때 맨 앞에 쓰는 거) 2 : 표준 에러
open
으로 입출력 통로를 열면 3부터 순차적으로 열림
- 파일 여는 데 실패하면 -1 리턴(파일 경로 잘 못 되었을 때)
- 입력 문서를 개행 문자로 split ⇒ 입력 문서를 줄 단위로 나눔
- 줄 단위로 문자열들을
:
으로 다시 한번 split
- split한 각각의
key
와 value
를 trim_string 명령어로 앞 뒤의 공백을 잘라줌
- 그 결과를 구조체 배열에 차례대로 넣는다
- 구조체 배열들에 할당하면서 split을 할 때 만든 문자열들 free
2. 프로그램 인자 개수 체크
- 인자가 1개, 2개가 아니면 에러
-
가 첫 번째로 들어오면 음수이기 때문에 에러
- 길이가 39가 넘어가면 주어진 dictionary 규격을 벗어나므로 에러
- 인자가 2개일 때는 새로 들어오는 파일을 찾을 수 없으면 에러
3. 숫자를 읽고 단어로 치환하는 알고리즘
translate.c ⇒ start_translate 함수로 시작
- ft_atoi로 숫자로만 이루어진 문자열로 치환
- 단어의 길이를 3의 배수로 맞춰준다
- 1234 ⇒ 001234, 52535 ⇒ 052535, 123456 ⇒ 123456
- 3개 단위로 잘라서 단어를 읽고, 천 단위로 단위를 붙여준다
- 100,000 ⇒ 100 + 1000
- 423,525,999 ⇒ 423 + million + 525 + thousand + 423
- 3글자의 배치에 따라 각각의 경우 하드 코딩 ex : 123, 15, 23, 150, 5
- 100의 자리가 0이 아니면 맨 앞 자리의 수를 읽고 구조체 배열의
key
값이 100인 값의 value
을 읽음
- 10의 자리
- 10의 자리가 1일 때는 값이 고정되어 있어서 그 수 자체의
key
값을 가진 구조체 배열의 value
를 읽음
- 10의 자리가 1이 아닐 때는 그 10의 자리 값을 읽고 뒤의 숫자 하나를 읽음
- 54 ⇒ 50 + 4 ⇒ fifity + four
- 10의 자리가 0일 때는 뒤의 1자리만 읽음
- 0의 경우만 0을 따로 읽음