2022년 2월 12일 토요일

C++ 문자열 분리 방법 1강

 오늘 포스팅할 내용은 C++을 이용하여 문자열을 분리 하는 방법을 알아 볼까 합니다.

C++을 쓰니까 당연히 STL 을 같이 사용하여 분리 하는 방법을 알아보겠습니다.

기존 C API를 이용하여 분리 하는 방법은 아래 링크에서 확인하시면 될거 같습니다.

C 문자열 분리방법 2강

작성을 위해서 기본적인 문자열 예시를 들겠습니다.

"Title=Blog@Writer=Berdo@PostDate=20220120"

기본 문자열은 위와 같습니다.

그냥 읽어보면 3개의 항목으로 키/값으로 분리 된것으로 보일겁니다.

일단 첫번째로 3개의 항목을 분리하여 간단히 출력하는 프로그램을 작성합니다.

프로그램 작성은 Windows에 Visual Studio Code 설치후 g++ 기반으로 작성 됩니다.

기본 프로그램 환경 구축은 아래 제 블러그 링크에서 확인하고 구성 하시면 됩니다.

Visual Studio Code C/C++ 개발환경 구축

코드를 먼저 보고 설명을 시작 하겠습니다.

#include <stdio.h>
#include <string.h>
#include <string>
#include <iostream>

using namespace std;

int main()
{
    string sOrgSrc = "Title=Blog@Writer=Berdo@PostDate=20220120";
    string sSepChar = "@", sTemp, sParse = sOrgSrc;
    
    // string find 를 이용하여 아이템 기본 분리.
    size_t nIndex = sParse.find(sSepChar);

    while (nIndex != string::npos)
    {
        sTemp = sParse.substr(0, nIndex);
        cout << "[Item:" << sTemp << "]" << endl;
        sParse = sParse.substr(nIndex+sSepChar.size(), sParse.size()-(nIndex+sSepChar.size()));
        nIndex = sParse.find(sSepChar);
    }
    
    //마지막항목 출력.
    cout << "[Item:" << sParse << "]" << endl;

    return 1;
}

using namespace std;

위 구문은 STL 라이브러리를 쓰기 위해서는 std:: 로 시작하는 타입을 지정하게 됩니다.

예를 들면 string 클래스를 쓰기 위해서는

std::string sText;

위와 같이 선언 해야 되는데 매번 std:: 를 입력하는것을 줄이기 위해 선언하는겁니다.

그러면 위 코드와 같이

string sText;

라고 선언 한것이 동일한 효과를 내는겁니다.

문자열 파싱을 위해서는 string 클래스에서 'find' 와 'substr' 두개를 이용하여 분리 합니다.

'find' 를 하게 되면 문자열 처음부터 검색하여 나오는 위치값을 리턴하게 됩니다.

위치값을 기반으로 'substr'을 호출하여 문자열을 잘라 냅니다.

잘라내고 난후 검색문자열을 찾아낸 값을 잘라낸후 다시 검색하여 처리 하는것을 반복 하는 겁니다.

while 문이 끝나고 나면 마지막 항목은 출력이 되지 않기 때문에 추가로 마지막 항목을 출력합니다.

string::npos 는 검색한값이 없을경우 리턴값 매칭으로 '-1' 과 같은 값이라고 보시면 될거에요.

그럼 이만 ^^

댓글 없음: