문자열 알고리즘
효율적으로 검색하고 분할하기
문자열 알고리즘은(는) CoddyKit의 무료 C++ Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C++ Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
find로 검색하기
find는 부분 문자열의 인덱스를 반환하며, 찾지 못하면 npos를 반환합니다. 복사 없이 뷰에서 직접 작동합니다.
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = "key=value";
auto pos = sv.find('=');
std::cout << pos << "\n"; // 3
}npos 확인하기
검색 결과를 인덱스로 사용하기 전에 항상 std::string_view::npos와 비교하세요.
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = "abc";
if (sv.find('z') == std::string_view::npos)
std::cout << "not found\n";
}접두사와 접미사 확인하기
starts_with와 ends_with(C++20)를 사용하면 의도가 분명해지고 수동으로 부분 문자열을 비교하지 않아도 됩니다.
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = "report.pdf";
std::cout << sv.starts_with("report") << "\n";
std::cout << sv.ends_with(".pdf") << "\n";
}필드 추출하기
find와 substr를 결합하면 새 문자열을 할당하지 않고 키와 값의 쌍을 나눌 수 있습니다.
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = "name=Ada";
auto eq = sv.find('=');
std::cout << sv.substr(0, eq) << " : " << sv.substr(eq + 1) << "\n";
}구분 기호로 나누기
구분 기호를 반복해서 찾고 하위 뷰를 가져오는 방식으로 토큰을 순회할 수 있습니다. 각 토큰은 단순히 하나의 뷰입니다.
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = "a,b,c";
size_t start = 0, pos;
while ((pos = sv.find(',', start)) != std::string_view::npos) {
std::cout << sv.substr(start, pos - start) << "\n";
start = pos + 1;
}
std::cout << sv.substr(start) << "\n";
}끝에서부터 찾기
rfind는 뒤에서부터 검색하므로 파일 확장자나 마지막 구분 기호를 가져올 때 편리합니다.
#include <iostream>
#include <string_view>
int main() {
std::string_view path = "/usr/local/bin";
auto slash = path.rfind('/');
std::cout << path.substr(slash + 1) << "\n"; // bin
}공백 제거하기
find_first_not_of와 find_last_not_of를 remove_prefix/remove_suffix와 함께 사용하면 복사 없이 공백을 제거할 수 있습니다.
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = " hi ";
sv.remove_prefix(sv.find_first_not_of(" "));
sv.remove_suffix(sv.size() - 1 - sv.find_last_not_of(" "));
std::cout << "[" << sv << "]\n"; // [hi]
}뷰 비교하기
뷰는 사전식 비교를 위한 ==와 compare를 지원하며, 포인터가 아니라 문자를 비교합니다.
#include <iostream>
#include <string_view>
int main() {
std::string_view a = "apple", b = "apple";
std::cout << (a == b) << "\n"; // 1
}출현 횟수 세기
각 일치 항목을 지나도록 이동하면서 find를 사용하는 반복문으로 문자나 부분 문자열이 나타나는 횟수를 셀 수 있습니다.
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = "mississippi";
int count = 0;
for (size_t p = sv.find('s'); p != std::string_view::npos; p = sv.find('s', p + 1)) ++count;
std::cout << count << "\n"; // 4
}알고리즘은 할당 없이 작동합니다
이러한 모든 연산은 동일한 기반 버퍼에서 작동합니다. 토큰과 잘라낸 결과는 하위 뷰이며, std::string을 만들 때까지 힙 할당이 발생하지 않습니다.
수명에 유의하기
이러한 알고리즘으로 만든 하위 뷰는 원본 버퍼의 수명을 공유합니다. 하위 뷰가 원본 문자열보다 오래 존재하지 않도록 하세요.
빠른 확인
string_view 알고리즘에 대한 이해를 확인해 보세요.
복습
뷰에서 문자열 알고리즘을 사용하는 방법을 배웠습니다:
find/rfind는 위치 또는npos를 반환합니다.starts_with/ends_with는 접두사와 접미사를 확인합니다.- 나누기, 공백 제거, 토큰화는 할당 없는 하위 뷰를 만듭니다.
- 하위 뷰는 원본의 수명을 공유하므로 매달리는 뷰에 유의해야 합니다.
자주 묻는 질문
“문자열 알고리즘” 강의는 무료인가요?
네 — “문자열 알고리즘” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C++ Academy 강의 전체를 잠금 해제할 수 있습니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“문자열 알고리즘”에서 뭘 배우나요?
효율적으로 검색하고 분할하기 브라우저에서 직접 실행하는 실습 코드로 C++ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C++ Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C++ Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“문자열 알고리즘” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C++ Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C++ Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- string_view를 사용하는 이유
- 뷰 만들기
- 주의점과 수명
- 문자열 알고리즘