프로그래밍 언어/C++

문자열 구분 기호 (표준 C ++)를 사용하여 C ++에서 문자열 구문 분석

Rateye 2021. 7. 19. 10:14
728x90
반응형

 

질문 : 문자열 구분 기호 (표준 C ++)를 사용하여 C ++에서 문자열 구문 분석 (분할)

다음을 사용하여 C ++에서 문자열을 구문 분석하고 있습니다.

using namespace std;

string parsed,input="text to be parsed";
stringstream input_stringstream(input);

if (getline(input_stringstream,parsed,' '))
{
     // do some processing.
     }
     

단일 문자 구분 기호로 구문 분석하는 것이 좋습니다. 그러나 문자열을 구분 기호로 사용하려면 어떻게해야합니까?

예 : 분할하고 싶습니다.

scott>=tiger
     

>= 를 구분 기호로 사용하여 scott과 tiger를 얻을 수 있습니다.

답변

std::string::find() 함수를 사용하여 문자열 구분 기호의 위치를 찾은 다음 std::string::substr() 을 사용하여 토큰을 얻을 수 있습니다.

예:

std::string s = "scott>=tiger";
std::string delimiter = ">=";
std::string token = s.substr(0, s.find(delimiter)); // token is "scott"
  • find(const string& str, size_t pos = 0) 함수는 문자열에서 str 의 첫 번째 발생 위치를 반환 npos 반환합니다.
  • substr(size_t pos = 0, size_t n = npos) pos 에서 시작하고 길이가 npos 객체의 부분 문자열을 반환합니다.

구분 기호가 여러 개인 경우 하나의 토큰을 추출한 후이를 제거 (구분 기호 포함)하여 후속 추출을 진행할 수 있습니다 (원래 문자열을 유지하려면 s = s.substr(pos + delimiter.length()); ) :

s.erase(0, s.find(delimiter) + delimiter.length());
     

이렇게하면 각 토큰을 얻기 위해 쉽게 반복 할 수 있습니다.

std::string s = "scott>=tiger>=mushroom";
std::string delimiter = ">=";

size_t pos = 0;
std::string token;
while ((pos = s.find(delimiter)) != std::string::npos) {
    token = s.substr(0, pos);
    std::cout << token << std::endl;
    s.erase(0, pos + delimiter.length());
}
std::cout << s << std::endl;

산출:

scott
tiger
mushroom
출처 : https://stackoverflow.com/questions/14265581/parse-split-a-string-in-c-using-string-delimiter-standard-c
728x90
반응형