Necesito comprobar si una cadena std: comienza con "xyz". ¿Cómo lo hago sin buscar en toda la cadena o crear cadenas temporales con substr ()?
90
Usaría el método de comparación:
std::string s("xyzblahblah");
std::string t("xyz")
if (s.compare(0, t.length(), t) == 0)
{
// ok
}
Un enfoque que podría estar más en consonancia con el espíritu de la biblioteca estándar sería definir su propio algoritmo starts_with.
Esto proporciona una interfaz más sencilla para el código del cliente y es compatible con la mayoría de los contenedores de la biblioteca estándar.
fuente
Busque la biblioteca String Algo de Boost , que tiene una serie de funciones útiles, como starts_with, istart_with (no distingue entre mayúsculas y minúsculas), etc. Si desea utilizar solo una parte de las bibliotecas boost en su proyecto, puede usar la utilidad bcp para copiar solo archivos necesarios
fuente
Parece que std :: string :: starts_with está dentro de C ++ 20, mientras que std :: string :: find se puede usar
fuente
std::string::compare
porque facilita verificar si la cadena comienza con un literal sin repetir el literal en sí para encontrar su tamaño. Y gracias por señalar la solución directa C ++ 20.Siento que no entiendo completamente su pregunta. Parece que debería ser trivial:
Esto solo mira (como máximo) los primeros tres caracteres. La generalización para una cadena que se desconoce en el momento de la compilación requeriría que reemplace lo anterior con un bucle:
fuente
t
.