std :: getline (stream, stringToReadInto, delimeter)을 사용할 수 있습니다.
'StringList는'
표준의 형식 정의 : 벡터가
StringList Seperate(const std::string &str, char divider, SeperationFlags seperationFlags, CharValidatorFunc whitespaceFunc)
{
return Seperate(str, CV_IS(divider), seperationFlags, whitespaceFunc);
}
StringList Seperate(const std::string &str, CharValidatorFunc isDividerFunc, SeperationFlags seperationFlags, CharValidatorFunc whitespaceFunc)
{
bool keepEmptySegments = (seperationFlags & String::KeepEmptySegments);
bool keepWhitespacePadding = (seperationFlags & String::KeepWhitespacePadding);
StringList stringList;
size_t startOfSegment = 0;
for(size_t pos = 0; pos < str.size(); pos++)
{
if(isDividerFunc(str[pos]))
{
//Grab the past segment.
std::string segment = str.substr(startOfSegment, (pos - startOfSegment));
if(!keepWhitespacePadding)
{
segment = String::RemovePadding(segment);
}
if(keepEmptySegments || !segment.empty())
{
stringList.push_back(segment);
}
//If we aren't keeping empty segments, speedily check for multiple seperators in a row.
if(!keepEmptySegments)
{
//Keep looping until we don't find a divider.
do
{
//Increment and mark this as the (potential) beginning of a new segment.
startOfSegment = ++pos;
//Check if we've reached the end of the string.
if(pos >= str.size())
{
break;
}
}
while(isDividerFunc(str[pos]));
}
else
{
//Mark the beginning of a new segment.
startOfSegment = (pos + 1);
}
}
}
//The final segment.
std::string lastSegment = str.substr(startOfSegment, (str.size() - startOfSegment));
if(keepEmptySegments || !lastSegment.empty())
{
stringList.push_back(lastSegment);
}
return stringList;
}
및 :
나는 개인적으로 다음과 같습니다 그것으로 구운 몇 가지 추가 기능을 가지고 내 자신의 함수를 사용 CharValidatorFunc는 하나의 char을 취하고 bool을 반환하는 함수에 대한 함수 포인터 (실제로는 펑터와 람다 지원을 허용하는 std :: function)입니다. 그렇게처럼 사용할 수 있습니다 :
StringList results = String::Seperate(" Meow meow , Green, \t\t\nblue\n \n, Kitties!", ',' /* delimeter */, DefaultFlags, is_whitespace);
그리고 결과를 반환합니다 : { "야옹 야옹", "녹색", "블루", "고양이 한테는!"}
'의 내부 공백을 보존 야옹 야옹 '하지만 변수를 둘러싼 공백과 탭 및 개행 문자를 제거하고 쉼표로 분리하십시오.
(CV_IS 특정 문자 또는 문자열 리터로한다 문자의 특정 컬렉션과 일치하는 펑 객체이다. I는 숯 검증 기능을 결합하는 CV_AND 및 CV_OR가) 리터럴 문자열을
를 I은 극한의 성능이 요구되지 않는 한 std :: string()에 던져서 함수에 넘겨 준다. delimeters를 깨는 것은 자신 만의 롤을 만드는 것이 매우 쉽습니다. 위의 기능은 프로젝트의 일반적인 사용법과 요구 사항에 맞게 사용자 정의되었지만 직접 수정하고 직접 청구하십시오.
이 다른 사람의 슬픔을주는 경우
이것은 내 progra의 전체 작동 코드가 아닙니다. 엠. 이것은 단지 내 질문에 그 부분을 어떻게하는지 보여주기위한 것입니다. – KateMak
일부 실험 과정에서이 과제가 있습니까? –
그 중 일부는 그렇습니다. 다른 부분은 호기심이었습니다. – KateMak