cpp module 00

slee2·2021년 9월 3일
0

42Seoul

목록 보기
9/15
post-thumbnail
post-custom-banner

ex00

서브젝트

  • 인자를 받고 아무 인자가 없으면 * LOUD AND UNBEARABLE FEEDBACK NOISE * 출력
  • 인자가 소문자면 대문자로 바꾼다.

str.length() -> 길이를 알 수 있다.
toupper(str[i]) -> 소문자가 있다면 대문자로 바꿔준다.

위 두 기능을 이용해 해결이 가능하다.

ex01

서브젝트

  • 값을 입력을 받는다.
  • EXIT - 종료
  • ADD - first name, last name, nickname, phone number, darkest secret 을 입력받고 저장한다.
  • SEARCH - 처음에 목록을 보여주고 인덱스값을 입력받아 그 인덱스의 정보를 보여준다.
  • 다른 입력은 무시한다.
  • 동적 할당을 사용하지 않으며, 8개 이상의 연락처를 저장할 수 없다.
  • 아홉 번째 연락처가 추가된 경우 가장 오래된 연락처를 바꾼다.

data a; <- 정적 할당(스택 영역)
동적 할당을 하려면 data *a = new data

ex02

서브젝트

  • tests.cpp 파일과 Accounts.hpp파일을 제공해준다.
  • 여기에 Accounts.cpp를 추가하여 log처럼 만들어라.

log

[19920104_091532] index:0;amount:42;created
[19920104_091532] index:1;amount:54;created
[19920104_091532] index:2;amount:957;created
[19920104_091532] index:3;amount:432;created
[19920104_091532] index:4;amount:1234;created
[19920104_091532] index:5;amount:0;created
[19920104_091532] index:6;amount:754;created
[19920104_091532] index:7;amount:16576;created
[19920104_091532] accounts:8;total:20049;deposits:0;withdrawals:0
[19920104_091532] index:0;amount:42;deposits:0;withdrawals:0
[19920104_091532] index:1;amount:54;deposits:0;withdrawals:0
[19920104_091532] index:2;amount:957;deposits:0;withdrawals:0
[19920104_091532] index:3;amount:432;deposits:0;withdrawals:0
[19920104_091532] index:4;amount:1234;deposits:0;withdrawals:0
[19920104_091532] index:5;amount:0;deposits:0;withdrawals:0
[19920104_091532] index:6;amount:754;deposits:0;withdrawals:0
[19920104_091532] index:7;amount:16576;deposits:0;withdrawals:0
[19920104_091532] index:0;p_amount:42;deposit:5;amount:47;nb_deposits:1
[19920104_091532] index:1;p_amount:54;deposit:765;amount:819;nb_deposits:1
[19920104_091532] index:2;p_amount:957;deposit:564;amount:1521;nb_deposits:1
[19920104_091532] index:3;p_amount:432;deposit:2;amount:434;nb_deposits:1
[19920104_091532] index:4;p_amount:1234;deposit:87;amount:1321;nb_deposits:1
[19920104_091532] index:5;p_amount:0;deposit:23;amount:23;nb_deposits:1
[19920104_091532] index:6;p_amount:754;deposit:9;amount:763;nb_deposits:1
[19920104_091532] index:7;p_amount:16576;deposit:20;amount:16596;nb_deposits:1
[19920104_091532] accounts:8;total:21524;deposits:8;withdrawals:0
[19920104_091532] index:0;amount:47;deposits:1;withdrawals:0
[19920104_091532] index:1;amount:819;deposits:1;withdrawals:0
[19920104_091532] index:2;amount:1521;deposits:1;withdrawals:0
[19920104_091532] index:3;amount:434;deposits:1;withdrawals:0
[19920104_091532] index:4;amount:1321;deposits:1;withdrawals:0
[19920104_091532] index:5;amount:23;deposits:1;withdrawals:0
[19920104_091532] index:6;amount:763;deposits:1;withdrawals:0
[19920104_091532] index:7;amount:16596;deposits:1;withdrawals:0
[19920104_091532] index:0;p_amount:47;withdrawal:refused
[19920104_091532] index:1;p_amount:819;withdrawal:34;amount:785;nb_withdrawals:1
[19920104_091532] index:2;p_amount:1521;withdrawal:657;amount:864;nb_withdrawals:1
[19920104_091532] index:3;p_amount:434;withdrawal:4;amount:430;nb_withdrawals:1
[19920104_091532] index:4;p_amount:1321;withdrawal:76;amount:1245;nb_withdrawals:1
[19920104_091532] index:5;p_amount:23;withdrawal:refused
[19920104_091532] index:6;p_amount:763;withdrawal:657;amount:106;nb_withdrawals:1
[19920104_091532] index:7;p_amount:16596;withdrawal:7654;amount:8942;nb_withdrawals:1
[19920104_091532] accounts:8;total:12442;deposits:8;withdrawals:6
[19920104_091532] index:0;amount:47;deposits:1;withdrawals:0
[19920104_091532] index:1;amount:785;deposits:1;withdrawals:1
[19920104_091532] index:2;amount:864;deposits:1;withdrawals:1
[19920104_091532] index:3;amount:430;deposits:1;withdrawals:1
[19920104_091532] index:4;amount:1245;deposits:1;withdrawals:1
[19920104_091532] index:5;amount:23;deposits:1;withdrawals:0
[19920104_091532] index:6;amount:106;deposits:1;withdrawals:1
[19920104_091532] index:7;amount:8942;deposits:1;withdrawals:1
[19920104_091532] index:0;amount:47;closed
[19920104_091532] index:1;amount:785;closed
[19920104_091532] index:2;amount:864;closed
[19920104_091532] index:3;amount:430;closed
[19920104_091532] index:4;amount:1245;closed
[19920104_091532] index:5;amount:23;closed
[19920104_091532] index:6;amount:106;closed
[19920104_091532] index:7;amount:8942;closed

vector

int	const				amounts[] = { 42, 54, 957, 432, 1234, 0, 754, 16576 };
size_t const				amounts_size( sizeof(amounts) / sizeof(int) );
accounts_t				accounts( amounts, amounts + amounts_size );
accounts_t::iterator			acc_begin = accounts.begin();
accounts_t::iterator			acc_end	 = accounts.end()

자동으로 메모리가 할당되는 배열이다. vector<[data type]> [변수이름] 로 선언할 수 있고, [변수이름].begin()같은 기능을 이용해 첫 인자와 마지막 인자를 가져올 수 있다. accounts(첫번째 인자의 주소, 마지막 인자의 주소);는 배열 선언 방법 중의 하나로, 첫번째 인자주소와 마지막 인자주소를 입력하면 자동으로 배열이 완성된다. 마지막으로 accounts_t::iterator은 반복자로 vector의 멤버 형식이다. 요소를 저장하여 사용할 수 있다.

[19920104_091532] index:0;amount:42;created
[19920104_091532] index:1;amount:54;created
[19920104_091532] index:2;amount:957;created
[19920104_091532] index:3;amount:432;created
[19920104_091532] index:4;amount:1234;created
[19920104_091532] index:5;amount:0;created
[19920104_091532] index:6;amount:754;created
[19920104_091532] index:7;amount:16576;created

Account::Account(int initial_deposit)

로그의 맨위는 생성자에서 발생한 것으로 처음에 accounts(amounts, amouts + amouts_size);로 배열이 선언됨가 동시에 Account생성자가 발생한다.

displayTimestamp

void	Account::_displayTimestamp(void)
{
	time_t	cur_time = time(nullptr);
	char	buff[16];
	
	strftime(buff, sizeof(buff), "%Y%m%d_%H%M%S", localtime(&cur_time));
	std::cout << "[" << buff << "]";
}

로그의 앞에 시간은 현재 시각을 나타내줘야한다. 그래서 사용하게 된게 time함수와 strftime이다. 시간 관련 함수는 ctime라이브러리에 존재하고, 월, 시, 분과 같은 값들을 묶어 구조체에 저장을 한다. localtime 함수를 이용하면 구조체에 시간을 저장을 할 수 있고, 이를 strftime함수가 원하는 형식으로 변환하여 버퍼에 넣어준다.

deposit과 withdrawal

로그를 보면 deposit과 amount를 더해 양수면 참, 음수면 거짓으로 판별되는 것 같다. withdrawal의 경우 amount에서 값을 빼 양수면 참 음수면 거짓이다.

post-custom-banner

0개의 댓글