Apparentemente non c'è alcuna funzione standard C per questo. Quindi:
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;
}
Si noti che quanto sopra è bella e chiara, ma se si sta facendo in un loop stretto o di lavoro con molto stringhe di grandi dimensioni, non può offrire le migliori prestazioni, come esegue la scansione dell'intera lunghezza di entrambe le stringhe in avanti (strlen
). Soluzioni come wj32's o Christoph's possono offrire prestazioni migliori (anche se this comment sulla vettorizzazione è al di là della mia conoscenza di C). Si noti anche Fred Foo's solution che evita strlen
su str
(ha ragione, non è necessario). Importa solo stringhe (molto) grandi o uso ripetuto in cicli stretti, ma quando è importante, conta.
fonte
2011-01-22 22:26:26
Penso che il tuo terzo esempio dovrebbe avere un risultato vero. –
@Burr: Sì, giusto. – thejh