본문 바로가기
C++ 공부

[C++]String 의 replace(), regex_replace() 함수 정의, 비교

by honey달콤 2024. 7. 27.
반응형
 

C++에서 문자열의 일부를 대체하는 함수로 replace와 regex_replace를 사용할 수 있습니다. 이 두 함수는 각기 다른 용도와 특성을 가지고 있습니다.

 

1. 사용 목적

  • replace 함수는 단순히 문자열의 특정 위치에 있는 부분 문자열을 다른 문자열로 대체하는 데 사용됩니다.
  • regex_replace 함수는 정규 표현식을 사용하여 문자열의 특정 패턴을 찾아 다른 문자열로 대체하는 데 사용됩니다.

 

replace 함수

replace 함수는 주로 std::string 클래스의 멤버 함수로 제공됩니다. 특정 위치의 부분 문자열을 다른 문자열로 대체할 때 사용됩니다.

std::string& replace(size_t pos, size_t len, const std::string& str);
  • pos: 대체를 시작할 위치.
  • len: 대체할 부분 문자열의 길이.
  • str: 대체할 문자열.

예제

#include <iostream>
#include <string>

int main() {
    std::string s = "Hello, world!";
    s.replace(7, 5, "C++");
    std::cout << s << std::endl; // 출력: Hello, C++!
    return 0;
}

regex_replace 함수

regex_replace 함수는 정규 표현식을 사용하여 문자열의 패턴을 대체할 때 사용됩니다. 이 함수는 regex 라이브러리의 일부이며, 더 복잡한 패턴 매칭과 대체 작업을 수행할 수 있습니다.

정의

template< class Traits, class Alloc, class charT, class ST >
std::basic_string<charT, ST, Alloc> regex_replace(const std::basic_string<charT, ST, Alloc>& s, const std::basic_regex<charT, Traits>& re, const std::basic_string<charT, ST, Alloc>& fmt);
  • s: 입력 문자열.
  • re: 정규 표현식.
  • fmt: 대체할 문자열 (서식 문자열).

예제1

#include <iostream>
#include <string>
#include <regex>

int main() {
    std::string s = "I have 2 apples and 10 oranges.";
    std::regex re("\\d+"); // 숫자를 찾는 정규 표현식
    std::string result = std::regex_replace(s, re, "many");
    std::cout << result << std::endl; // 출력: I have many apples and many oranges.
    return 0;
}

예제2

#include <string>
#include <vector>
#include <regex>

using namespace std;

string solution(string rny_string) {
    string answer = regex_replace(rny_string, regex("m"), "rn");
    return answer;
}

 

2. 복잡성

  • replace 함수는 비교적 간단하며, 정규 표현식이 필요하지 않은 경우에 사용됩니다.
  • regex_replace 함수는 더 복잡하며, 정규 표현식을 사용하여 패턴 매칭을 수행할 수 있습니다. 복잡한 문자열 변환 작업에 유용합니다.

3. 성능

  • replace 함수는 단순한 위치 기반 대체 작업을 수행하므로 더 빠르고 성능이 뛰어납니다.
  • regex_replace 함수는 정규 표현식을 처리해야 하므로 상대적으로 더 느릴 수 있습니다. 그러나 패턴 매칭이 필요한 경우에는 유용합니다.

이 두 함수는 각기 다른 상황에서 유용하게 사용될 수 있습니다. 단순한 문자열 대체 작업에는 replace를, 복잡한 패턴 매칭이 필요한 경우에는 regex_replace를 사용하는 것이 적합합니다.

반응형

댓글