Al parecer no hay ninguna función de C estándar para esto. Por lo tanto:
bool startsWith(const char *pre, const char *str)
{
size_t lenpre = strlen(pre),
lenstr = strlen(str);
return lenstr < lenpre ? false : strncmp(pre, str, lenpre) == 0;
}
Tenga en cuenta que lo anterior es agradable y claro, pero si lo haces en un bucle estrecho o trabajar con muy grandes cadenas, que no puede ofrecer el mejor rendimiento, como escanea la longitud total de ambas cadenas por adelantado (strlen
). Las soluciones como wj32's o Christoph's pueden ofrecer un mejor rendimiento (aunque this comment sobre la vectorización está más allá de mi conocimiento de C). También tenga en cuenta Fred Foo's solution que evita strlen
en str
(tiene razón, no es necesario). Solo importa para cuerdas (muy) grandes o uso repetido en bucles apretados, pero cuando importa, importa.
Creo que su tercer ejemplo debería tener un resultado verdadero. –
@Burr: Sí, claro. – thejh