98 votes

Comment vérifier si une chaîne commence par une autre chaîne en C ?

Existe-t-il quelque chose comme startsWith(str_a, str_b) dans la bibliothèque C standard ?

Il devrait prendre des pointeurs vers deux chaînes qui se terminent par des octets nuls et me dire si la première apparaît également complètement au début de la seconde.

Exemples:

 "abc", "abcdef" -> true
"abcdef", "abc" -> false
"abd", "abdcef" -> true
"abc", "abc"    -> true

35voto

Christoph Points 64389

J'irais probablement avec strncmp() , mais juste pour le plaisir, une implémentation brute :

 _Bool starts_with(const char *restrict string, const char *restrict prefix)
{
    while(*prefix)
    {
        if(*prefix++ != *string++)
            return 0;
    }

    return 1;
}

6voto

gscott Points 75

Utilisez la fonction strstr() . Stra == strstr(stra, strb)

5voto

wj32 Points 4505

Je ne suis pas un expert en écriture de code élégant, mais...

 int prefix(const char *pre, const char *str)
{
    char cp;
    char cs;

    if (!*pre)
        return 1;

    while ((cp = *pre++) && (cs = *str++))
    {
        if (cp != cs)
            return 0;
    }

    if (!cs)
        return 0;

    return 1;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X