10
votes

Comment comparer N Personnages Derniers d'une chaîne à une autre chaîne en C

Imaginez que j'ai deux chaînes, l'une d'elles est une URL comme "/sdcard/test.avi" et l'autre est "/sdcard/test.mkv". Je veux écrire une instruction si vous recherchez si les quatre derniers caractères de la chaîne sont ".avi" ou non dans C. Comment puis-je faire cela? Utiliser STRCMP ou quoi et comment?


0 commentaires

6 Réponses :


25
votes

Si vous avez un tableau pointeur à caractère, str , alors ceci: xxx

vous donnera un pointeur aux quatre derniers caractères de la chaîne. . Vous pouvez ensuite utiliser strcmp () . Notez que vous aurez besoin de faire face au cas où (len <4) , auquel cas, ce qui précède ne sera pas valide.


2 commentaires

Merci.it a fixé le problème.


Sa solution simple. Je viens d'avoir besoin de ça aujourd'hui! Merci.



2
votes

dans pure c Vous pouvez également recourir à un comparaison manuelle: xxx


0 commentaires

2
votes

Il suffit d'effectuer si (STRCMP (STR1 + SHLEN (STR1) -4, STRI2 + SHLEN (STRI2) -4) == 0) {} .

Assurez-vous que les deux chaînes ont au moins 4 caractères.


2 commentaires

Vous avez besoin peut-être & str1 [SHLEN (STR1) -4] etc.


Les arithmétiques du pointeur ont travaillé pour être mieux que Strlen - offset]



0
votes

Voici une fonction générique pour tester:

int EndsWithTail(char *url, char* tail)
{
    if (strlen(tail) > strlen(url))
        return 0;

    int len = strlen(url);

    if (strcmp(&url[len-strlen(tail)],tail) == 0)
        return 1;
    return 0;
}


1 commentaires

Vous manquez une parenthèse finale pour votre première instruction si



0
votes
#include <dirent.h>
#include <string.h>

int main(void)
{
    DIR *dir;
    struct dirent *ent;
    char files[100][500];
    int i = 0;

    memset(files, 0, 100*500);
    dir = opendir ("/sdcard/");
    if (dir != NULL)
    {
        /* Print all the files and directories within directory */
        while ((ent = readdir (dir)) != NULL)
        {
            strcpy(files[i], ent->d_name);
            if(strstr(files[i], ".avi") != NULL)
            {
                printf("\n files[%d] : %s is valid app file\n", i, files[i]);
                i++;
            }
        }
        closedir (dir);
    }
    return 0;
}

1 commentaires

Bienvenue dans le débordement de la pile! Plutôt que de publier uniquement un bloc de code, veuillez expliquer pourquoi ce code résout le problème posé. Sans explication, ce n'est pas une réponse.



1
votes

Que diriez-vous ...

if (!strcmp(strrchr(str, '\0') - 4, ".avi")){
    //The String ends with ".avi"
}


0 commentaires