std :: comparação de string (verificação se seqüência começa com outra string)

StackOverflow https://stackoverflow.com/questions/931827

  •  06-09-2019
  •  | 
  •  

Pergunta

Eu preciso verificar se um std: string começa com "xyz". Como posso fazê-lo sem ter de procurar por toda a corda ou a criação de cadeias temporárias com substr ().

Foi útil?

Solução

Gostaria de usar método de comparar:

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

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

Outras dicas

Uma abordagem que poderia ser mais de acordo com o espírito da biblioteca padrão seria para definir o seu próprio algoritmo BEGINS_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());
}

Isso fornece uma interface mais simples para o código do cliente e é compatível com a maioria dos recipientes de biblioteca padrão.

Olhe para Cadeia Algo do Boost, que tem uma série de funções úteis, tais como starts_with, istart_with (maiúsculas e minúsculas), etc. Se você quiser usar apenas parte de bibliotecas de impulso em seu projeto, então você pode usar bcp utilitário para copiar arquivos somente necessários

Parece que std :: string :: starts_with está dentro C ++ 20, entretanto std :: string :: find pode ser usado

std::string s1("xyzblahblah");
std::string s2("xyz")

if (s1.find(s2) == 0)
{
   // ok, s1 starts with s2
}

Eu sinto que não estou entendendo perfeitamente a sua pergunta. Parece que ele deve ser trivial:

s[0]=='x' && s[1]=='y' && s[2]=='z'

Isso só olha para (no máximo) os três primeiros caracteres. A generalização para uma string que é desconhecido em tempo de compilação seria necessário que você substituir o acima com um loop:

// look for t at the start of s
for (int i=0; i<s.length(); i++)
{
  if (s[i]!=t[i])
    return false;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top