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
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
C ++에서 PI 상수를 사용하는 방법 (0) | 2021.07.22 |
---|---|
C ++에서 포인터 변수와 참조 변수의 차이점 (0) | 2021.07.20 |
"STL"과 "C ++ 표준 라이브러리"의 차이점 (0) | 2021.07.16 |
C ++에서 int를 문자열로 변환하는 가장 쉬운 방법 (0) | 2021.07.15 |
C #으로 JSON을 구문 분석을 수행하는 방법 (0) | 2021.07.14 |