String 부분 문자열 substr
basic_string substr(size_type pos = 0, size_type count = npos) const;
첫 번째 인자는 시작 위치, 두 번째 인자는 부분 문자열의 길이를 의미한다.
인자를 하나만 넣게 되면, 자동으로 문자열의 마지막 위치까지 잘라서 리턴하게 된다.
소문자를 대문자로, 대문자를 소문자로 ! Transform 함수
https://artist-developer.tistory.com/28
template <class InputIt1, class InputIt2, class OutputIt, class BinaryOperation>
OutputIt transform(InputIt1 first1, InputIt1 last1, InputIt2 first2,
OutputIt d_first, BinaryOperation binary_op);
transform 함수를 이용해서 모든 문자를 대문자, 혹은 소문자로 변경할 수 있다.
transform(str1.begin(), str1.end(), str1.begin(), ::tolower);
transform(str2.begin(), str2.end(), str2.begin(), ::tolower);
문자열 대체하기 replace_all
[C/C++] string replace all 문자열 모두 치환 (tistory.com)
#include <string>
void replace_all(std::string& str, const std::string& old_value, const std::string& new_value) {
size_t pos = 0;
while ((pos = str.find(old_value, pos)) != std::string::npos) {
str.replace(pos, old_value.length(), new_value);
pos += new_value.length();
}
}
STL 에는 replace_all이 따로 적용되어있지 않아 위의 함수를 추가해주어야 한다.
문자열 중복 제거, Unique
코딩벌레 :: [C++]벡터 중복제거(sort,unique,erase) (tistory.com)
#include <algorithm>
int main(){
arr.erase(unique(arr.begin(), arr.end()), arr.end());
}
a a b b b c 와 같은 벡터를 a b c의 형태로 각 문자를 유일하게 변경하는 예제이다.
문자열 포함된 숫자 파싱하기
1. sstream을 사용한 방법
#include <sstream>
#include <string>
int main() {
std::string input = "Hello 123 World";
std::stringstream ss(input);
std::string token;
int number;
while (ss >> token) {
std::stringstream convert(token);
if (convert >> number) {
std::cout << "추출된 숫자: " << number << std::endl;
}
}
return 0;
}
2. 반복문을 이용한 방법
#include <iostream>
#include <string>
#include <cctype>
int main() {
std::string input = "Hello 123 World";
std::string numberString;
int number = 0;
for (char c : input) {
if (std::isdigit(c)) {
numberString += c;
} else {
if (!numberString.empty()) {
number = std::stoi(numberString);
std::cout << "추출된 숫자: " << number << std::endl;
numberString.clear();
}
}
}
if (!numberString.empty()) {
number = std::stoi(numberString);
std::cout << "추출된 숫자: " << number << std::endl;
}
return 0;
}
문자열 공백을 기준으로 int, string, char 파싱하기 (Stringstream)
[C++] stringstream 사용법 (tistory.com)
#include <sstream>
헤더에서 정의되며, 아래와 같이 사용된다.
#include <string>
int main() {
std::string input = "42 A Hello World";
std::stringstream ss(input);
int number;
char character;
std::string message;
// 문자열을 파싱하여 변수에 저장합니다.
ss >> number >> character >> message;
// 파싱한 값을 출력합니다.
std::cout << "Number: " << number << std::endl;
std::cout << "Character: " << character << std::endl;
std::cout << "Message: " << message << std::endl;
return 0;
}
공백 포함 문자열 입력 받기
1. getline()
#include <iostream>
#include <string>
int main() {
std::string input;
std::cout << "문자열을 입력하세요: ";
std::getline(std::cin, input);
std::cout << "입력한 문자열: " << input << std::endl;
return 0;
}
2. getline을 이용해 받은 문자열을 stringstream으로 분리하기
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::string input;
std::cout << "문자열을 입력하세요: ";
std::getline(std::cin, input);
std::stringstream ss(input);
std::string token;
while (ss >> token) {
std::cout << "토큰: " << token << std::endl;
}
return 0;
}
한글 문자열 입출력하기
자주 나오지는 않지만, 한글 문자열은 프로그램 상에서 영어와 다르게 처리해야하기 때문에 아래 정리 글을 보고 처리하길 바란다
ant-note/cpp/korean-string.md at master · shyuuuuni/ant-note · GitHub
'Langauge > C++' 카테고리의 다른 글
[C++] 스택(stack), 큐(queue), 데크(deque) 직접 구현하기 (1) | 2023.06.19 |
---|---|
[C++] 이분 탐색으로 lower_bound, upper_bound 구현하기 (0) | 2023.06.19 |
[C++] 코딩 테스트에 자주 나오는 숫자 관련 연산 예제들 (0) | 2023.06.19 |
[C++] 우선순위 큐 (priority_queue) STL 사용법, 구현, 정렬 (0) | 2023.06.19 |
[C++] 비트마스크 (bitmask) 의 구현, 다양한 예제 (0) | 2023.06.19 |