Preciso verificar se um std: string começa com "xyz". Como faço isso sem pesquisar toda a string ou criar strings temporárias com substr ().
90
Eu usaria o método de comparação:
std::string s("xyzblahblah");
std::string t("xyz")
if (s.compare(0, t.length(), t) == 0)
{
// ok
}
Uma abordagem que pode estar mais de acordo com o espírito da Biblioteca Padrão seria definir seu próprio algoritmo begin_with.
Isso fornece uma interface mais simples para o código do cliente e é compatível com a maioria dos contêineres da Biblioteca Padrão.
fonte
Olhe para a biblioteca String Algo do Boost , que tem uma série de funções úteis, como starts_with, istart_with (não diferencia maiúsculas de minúsculas), etc. Se você quiser usar apenas parte das bibliotecas boost em seu projeto, então você pode usar o utilitário bcp para copiar apenas arquivos necessários
fonte
Parece que std :: string :: starts_with está dentro de C ++ 20, entretanto std :: string :: find pode ser usado
fonte
std::string::compare
pois torna mais fácil verificar se a string começa com um literal sem repetir o próprio literal para encontrar seu tamanho. E obrigado por apontar para a solução direta C ++ 20.Sinto que não estou entendendo totalmente sua pergunta. Parece que deveria ser trivial:
Isso só olha (no máximo) os três primeiros caracteres. A generalização para uma string desconhecida em tempo de compilação exigiria que você substituísse o acima por um loop:
fonte
t
.