문자열 처리 프로그램 작성
실습 개요
이번 실습에서는 5장에서 학습한 배열과 문자열 관련 개념을 종합적으로 적용하여 실제 문자열 처리 프로그램을 작성해 보겠습니다.
이를 통해 1차원 배열, 다차원 배열, C 스타일 문자열, 그리고 std::string 클래스의 사용법을 실제로 적용해 볼 수 있습니다.
프로그램 요구사항
다음 기능을 가진 문자열 처리 프로그램을 작성하세요.
- 사용자로부터 여러 문자열을 입력받아 저장
- 저장된 문자열들을 알파벳 순으로 정렬
- 특정 문자열 검색 기능 구현
- 모든 문자열을 대문자로 변환하는 기능 구현
- 가장 긴 문자열과 가장 짧은 문자열 찾기
프로그램 구조
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
void inputStrings(std::vector<std::string>& strings);
void sortStrings(std::vector<std::string>& strings);
bool searchString(const std::vector<std::string>& strings, const std::string& target);
void convertToUppercase(std::vector<std::string>& strings);
void findLongestAndShortest(const std::vector<std::string>& strings);
void printStrings(const std::vector<std::string>& strings);
int main() {
std::vector<std::string> strings;
// 메인 로직 구현
return 0;
}
// 아래부터 함수를 구현하세요.
주요 함수 구현
문자열 입력 받기
void inputStrings(std::vector<std::string>& strings) {
std::string input;
std::cout << "문자열을 입력하세요 (입력을 마치려면 빈 줄을 입력하세요):" << std::endl;
while (std::getline(std::cin, input) && !input.empty()) {
strings.push_back(input);
}
}
이 함수는 사용자로부터 여러 줄의 문자열을 입력받아 vector에 저장합니다. 빈 줄이 입력되면 입력이 종료됩니다.
문자열 정렬
void sortStrings(std::vector<std::string>& strings) {
std::sort(strings.begin(), strings.end());
}
이 함수는 std::sort 알고리즘을 사용하여 문자열들을 알파벳 순으로 정렬합니다.
문자열 검색
bool searchString(const std::vector<std::string>& strings, const std::string& target) {
return std::find(strings.begin(), strings.end(), target) != strings.end();
}
이 함수는 std::find 알고리즘을 사용하여 특정 문자열을 검색합니다.
대문자 변환
void convertToUppercase(std::vector<std::string>& strings) {
for (std::string& str : strings) {
for (char& c : str) {
c = std::toupper(c);
}
}
}
이 함수는 모든 문자열의 각 문자를 대문자로 변환합니다.
가장 긴/짧은 문자열 찾기
void findLongestAndShortest(const std::vector<std::string>& strings) {
if (strings.empty()) {
std::cout << "문자열이 없습니다." << std::endl;
return;
}
auto [minIt, maxIt] = std::minmax_element(strings.begin(), strings.end(),
[](const std::string& a, const std::string& b) {
return a.length() < b.length();
});
std::cout << "가장 짧은 문자열: " << *minIt << std::endl;
std::cout << "가장 긴 문자열: " << *maxIt << std::endl;
}
이 함수는 std::minmax_element 알고리즘을 사용하여 가장 짧은 문자열과 가장 긴 문자열을 찾습니다.
문자열 출력
void printStrings(const std::vector<std::string>& strings) {
for (const auto& str : strings) {
std::cout << str << std::endl;
}
}
이 함수는 저장된 모든 문자열을 출력합니다.
메인 함수 구현
int main() {
std::vector<std::string> strings;
inputStrings(strings);
std::cout << "\n입력된 문자열:" << std::endl;
printStrings(strings);
sortStrings(strings);
std::cout << "\n정렬된 문자열:" << std::endl;
printStrings(strings);
std::string searchTarget;
std::cout << "\n검색할 문자열을 입력하세요: ";
std::getline(std::cin, searchTarget);
if (searchString(strings, searchTarget)) {
std::cout << "'" << searchTarget << "' 찾았습니다." << std::endl;
} else {
std::cout << "'" << searchTarget << "' 찾지 못했습니다." << std::endl;
}
convertToUppercase(strings);
std::cout << "\n대문자로 변환된 문자열:" << std::endl;
printStrings(strings);
findLongestAndShortest(strings);
return 0;
}
실행 예시
문자열을 입력하세요 (입력을 마치려면 빈 줄을 입력하세요):
apple
banana
cherry
date
입력된 문자열:
apple
banana
cherry
date
정렬된 문자열:
apple
banana
cherry
date
검색할 문자열을 입력하세요: banana
'banana' 찾았습니다.
대문자로 변환된 문자열:
APPLE
BANANA
CHERRY
DATE
가장 짧은 문자열: DATE
가장 긴 문자열: BANANA
실습
- 문자열 내 특정 문자의 개수를 세는 기능을 추가하세요.
- 문자열을 역순으로 정렬하는 옵션을 구현하세요.
- 중복된 문자열을 제거하는 기능을 구현하세요.
- 각 문자열의 길이를 함께 출력하는 기능을 추가하세요.
- 문자열 일부를 다른 문자열로 치환하는 기능을 구현하세요.
학습 포인트
- std::vector와 std::string의 조합 사용
- STL 알고리즘(std::sort, std::find, std::minmax_element)의 활용
- 범위 기반 for 루프의 사용
- 람다 함수의 기본적인 사용
- 문자열 처리 함수들의 실제 적용
주의사항
- 입력 검증의 중요성 : 사용자 입력에 대한 적절한 검증을 수행하세요.
- 메모리 관리 : 대용량 데이터 처리 시 메모리 사용에 주의하세요.
- 예외 처리 : 프로그램의 안정성을 위해 적절한 예외 처리를 추가하세요.
- 성능 고려 : 대량의 문자열을 처리할 때 성능 최적화 방법을 고민해보세요.
참고자료
- C++ 표준 라이브러리 알고리즘 : C++ Algorithms Library
- C++ 문자열 처리 Best Practices : C++ String Handling Best Practices
- 정규 표현식 라이브러리 : std::regex
- 국제화와 지역화 관련 리소스 : ICU - International Components for Unicode
- C++ Core Guidelines : SL : The Standard Library