문제

STD : String이 "XYZ"로 시작하는지 확인해야합니다. 전체 문자열을 검색하거나 substr ()로 임시 문자열을 만들지 않고 어떻게해야합니까?

도움이 되었습니까?

해결책

비교 방법을 사용합니다.

std::string s("xyzblahblah");
std::string t("xyz")

if (s.compare(0, t.length(), t) == 0)
{
// ok
}

다른 팁

표준 라이브러리의 정신에 더 적합한 접근 방식은 알고리즘과 함께 자신의 시작을 정의하는 것입니다.

#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());
}

이는 클라이언트 코드에 대한 간단한 인터페이스를 제공하며 대부분의 표준 라이브러리 컨테이너와 호환됩니다.

부스트를보세요 문자열 알고 STARK_WITH, ISTART_WITH (CASE Insensitive) 등과 같은 여러 가지 유용한 기능이있는 라이브러리가 프로젝트에서 부스트 라이브러리의 일부만 사용하려면 BCP 유틸리티를 사용하여 필요한 파일 만 복사 할 수 있습니다.

std :: string :: starts_with가 C ++ 20에있는 것 같습니다.

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;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top