cpp module 00
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에서 값을 빼 양수면 참 음수면 거짓이다.
Author And Source
이 문제에 관하여(cpp module 00), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@seungju0000/cpp-module-00저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)