Language/C++

[C++] 문자열 처리 - 연속된 문자열과 동일한 문자열 (2)

nowkoes 2023. 8. 26. 00:00

동일한 문자열

 동일한 문자열특정 문자나 문자열 패턴이 반복되는 것을 의미한다. 이를 식별하는 함수를 문자열 순회를 이용하는 방법, regex 라이브러리를 이용하는 방법을 통해 구현해 보자.

 

문자열 순회

#include <iostream>
#include <string>

bool IsRepeated(const std::string& str) 
{
    for (int i = 1; i < str.length(); ++i)
    {
        if (str[i] == str[i + 1])
            return true;
    }

    return false;
}

int main()
{
    std::string str;
    std::getline(std::cin, str);

    if (IsRepeated(str))
        std::cout << str << " is repating string\n";

    else
        std::cout << str << " is not repating string\n";

    return 0;
}

 

 문자열을 순회하면서 ASCII 코드의 값을 이용해 동일한 문자가 반복되었는지 확인하는 함수다. 

 

regex 라이브러리

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

bool IsRepeated(const std::string& str) 
{
    std::regex pattern("(.)\\1");

    return std::regex_search(str, pattern);
}

int main() 
{
    std::string str;
    std::getline(std::cin, str);

    if (IsRepeated(str))
        std::cout << str << " is repeating string\n";
        
    else
        std::cout << str << " is not repeating string\n";

    return 0;
}

 

 regex 라이브러리를 활용하여 일치하는 패턴이 있는지 찾는 함수다. 여기서 (.)는 캡처 그룹을 의미하며, '.'는 어떤 문자든지 하나의 문자를 의미한다. 즉, (.)는 문자열의 어떤 문자든지 하나를 캡처하는 그룹이 된다. 그리고 \\1 이 부분은 첫 번째 캡처 그룹의 내용과 일치하는 문자를 찾는 부분이다. 따라서 (.)\\1은 문자열에서 두 개의 연속된 동일한 문자를 찾는 데 사용된다.


요약

동일한/연속된 문자열 처리
1. 문자열을 순회하며 각 문자의 ASCII 값의 차이를 이용하여 식별 가능
2. regex 라이브러리를 이용하여 정규식 패턴을 이용하여 식별 가능
 - 연속된 문자열은 알파벳과 숫자를 |를 이용하여 연속성을 부여하고, 동일한 문자열은 (.)\\1로 2개 이상의 문자를 감지
반응형