در حالت کلی، در برنامهنویسی نمیخواهید چرخ را از نو اختراع کنید. برای بسیاری از الگوریتمهای استاندارد، کسی هست که شاید کار شما را از پیش انجام داده باشد.
include
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"
string در C++ یک شیء تغییرپذیر است که متن را بهصورت دنبالهای از کاراکترها (حروف، ارقام، نشانههای نگارشی و غیره) نمایش میدهد.
رشتهها با فراخوانی متدهای رشته دستکاری میشوند.
در 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 موقعیت اولین رخداد در رشته را برمیگرداند، با اندیسگذاری از صفر.
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)"