일반적으로 프로그래밍에서는 바퀴를 다시 발명할 필요가 없어요. 많은 표준 알고리즘은 이미 누군가가 대신 만들어 놓았을 수도 있어요.
다른 파일의 내용을 포함하려면 C++에서는 include 지시문을 사용해요.
이런 인클루드는 보통 파일 맨 위에 적어요.
컴파일하는 동안, 지시문이 있는 줄은 해당 파일의 내용으로 바뀌어요.
인클루드 뒤에도 네임스페이스는 원래 파일에 있던 그대로 유지돼요.
표준 라이브러리는 자주 쓰이는 많은 함수와 알고리즘, 자료 구조를 제공해요.
표준 라이브러리는 std 네임스페이스를 사용해요.
한 가지 예로 C 수치 라이브러리인 cmath가 있어요.
이 라이브러리는 자주 쓰이는 수학 연산을 많이 제공해요.
#include <cmath>
int cube_me(int a) {
// raise `a` to the third power
return std::pow(a, 3);
}
표준 라이브러리는 큰따옴표 " 대신 꺾쇠괄호 <>로 포함해요.
두 방식의 차이는 컴파일러가 해당 파일을 찾는 위치에 있어요.
꺾쇠괄호를 쓰는 방식은 현재 프로젝트에서의 검색을 건너뛰고, 시스템의 include 디렉터리에서 바로 찾기 시작해요.
로컬 파일을 포함하고 싶다면 큰따옴표를 사용해요: #include "myfile"
C++의 string은 문자(글자, 숫자, 구두점 등)의 나열로 텍스트를 나타내는 변경 가능한 객체예요.
문자열은 그 문자열의 메서드를 호출해서 다뤄요.
C++에서는 문자열 타입과 관련 함수를 사용하기 전에 문자열 라이브러리에서 인클루드해야 해요.
파일 맨 위에 #include <string>을 추가하면 돼요.
그러면 이들은 std 네임스페이스에 들어가요.
문자열 타입의 완전한 이름은 std::string이에요.
문자열 리터럴은 큰따옴표 문자 "를 사용해요.
#include <string>
std::string w_berry_quote{"A well-made sentence, I think, is a thing of beauty."};
+ 연산자로 문자열을 이어 붙일 수 있어요:
std::string original_title{"The School of Rock"};
std::string sequel_indicator{"Electric Boogaloo"};
std::string next_movie_title = original_title + " 2: " + sequel_indicator;
문자열 라이브러리를 사용하려면, 객체에 속한 함수를 호출할 수 있다는 점을 알아야 해요. 이런 함수를 멤버 함수라고 해요. 앞으로 배우게 될 내용에서는 멤버 함수와 그와 연결된 클래스 개념을 더 자세히 다뤄요.
std::string qualification{"awesome"};
// 1st argument: from the index to the end of the string:
std::string who_is_awesome = qualification.substr(5);
// => "me"
// 2nd optional argument for the length:
std::string material{"haunted books"};
std::string ghost = material.substr(8, 3);
// => "boo"
find 함수도 아주 유용해요.
이 함수는 문자열에서 멤버 함수로 호출하고, 인자로 문자열을 받아요.
find는 문자열에서 가장 먼저 나타나는 위치를 0부터 시작하는 인덱스로 반환해요.
std::string new_release{"apple released a new app!"};
new_release.find("app");
// => 0
new_release.find("e");
// => 4
이 연습 문제에서는 기록된 보고서에서 가져온 줄을 처리해요.
각 로그 줄은 "[<LEVEL>]: <MESSAGE>" 형식의 문자열이에요.
로그 레벨은 세 가지가 있어요.
INFOWARNINGERROR과제는 세 개이고, 각 과제에서는 로그 줄을 하나씩 받아 그 줄로 무언가를 해요.
로그 줄의 메시지를 반환하도록 log_line::message 메서드를 구현해요.
log_line::message("[ERROR]: Invalid operation")
// => "Invalid operation"
로그 줄의 로그 레벨을 반환하도록 log_line::log_level 메서드를 구현해요. 이때 로그 레벨은 대문자로 반환해야 해요.
log_line::log_level("[ERROR]: Invalid operation")
// => "ERROR"
로그 줄의 형식을 바꾸는 log_line::reformat 메서드를 구현해요. 메시지를 앞에 두고, 그 뒤에 로그 레벨을 괄호 안에 넣어요.
log_line::reformat("[INFO]: Operation completed")
// => "Operation completed (INFO)"
Exercism에 가입하고 C++ 트랙을 개념 19개연습 문제 100개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.