반응형
std :: string 비교 (문자열이 다른 문자열로 시작하는지 확인)
std : string이 "xyz"로 시작하는지 확인해야합니다. 전체 문자열을 검색하거나 substr ()을 사용하여 임시 문자열을 만들지 않고 어떻게합니까?
비교 방법을 사용합니다.
std::string s("xyzblahblah");
std::string t("xyz")
if (s.compare(0, t.length(), t) == 0)
{
// ok
}
표준 라이브러리의 정신에 더 부합 할 수있는 접근 방식은 자신 만의 starts_with 알고리즘을 정의하는 것입니다.
#include <algorithm>
using namespace std;
template<class TContainer>
bool begins_with(const TContainer& input, const TContainer& match)
{
return input.size() >= match.size()
&& equal(match.begin(), match.end(), input.begin());
}
이는 클라이언트 코드에 대한 더 간단한 인터페이스를 제공하며 대부분의 표준 라이브러리 컨테이너와 호환됩니다.
starts_with, istart_with (대소 문자 구분 안 함) 등과 같은 유용한 함수가 많이 있는 Boost의 String Algo 라이브러리를 살펴보십시오 . 프로젝트에서 boost 라이브러리의 일부만 사용하려는 경우 bcp 유틸리티를 사용하여 복사 할 수 있습니다. 필요한 파일 만
std :: string :: starts_with는 C ++ 20 내부에있는 것 같지만 std :: string :: find를 사용할 수 있습니다.
std::string s1("xyzblahblah");
std::string s2("xyz")
if (s1.find(s2) == 0)
{
// ok, s1 starts with s2
}
귀하의 질문을 완전히 이해하지 못하는 것 같습니다. 사소한 것처럼 보입니다.
s[0]=='x' && s[1]=='y' && s[2]=='z'
이것은 (최대) 처음 세 글자 만 봅니다. 컴파일 타임에 알려지지 않은 문자열을 일반화하려면 위의 내용을 루프로 대체해야합니다.
// look for t at the start of s
for (int i=0; i<s.length(); i++)
{
if (s[i]!=t[i])
return false;
}
반응형
'code' 카테고리의 다른 글
R의 문자열에서 모든 특수 문자를 제거 하시겠습니까? (0) | 2020.09.05 |
---|---|
orderBy 후 Angularjs가 잘못된 $ index (0) | 2020.09.05 |
PHP : 함수가 어디에서 호출되었는지 확인 (0) | 2020.09.05 |
VS 2010에서 들여 쓰기 점선을 비활성화하는 방법 (0) | 2020.09.05 |
단일 명령문에서 Java에서 실행되는 여러 쿼리 (0) | 2020.09.05 |