2011-03-14 23 views

Respuesta

21

Si tiene una matriz de puntero a char, str, entonces esto:

int len = strlen(str); 
const char *last_four = &str[len-4]; 

le dará un puntero a los cuatro últimos caracteres de la cadena. A continuación, puede usar strcmp(). Tenga en cuenta que tendrá que lidiar con el caso donde (len < 4), en cuyo caso lo anterior no será válido.

+0

Gracias. Ha solucionado el problema. – sjor

+0

Su solución simple. ¡Lo acabo de necesitar hoy! Gracias. –

1

En C pura sólo se puede recurrir al manual de comparar:

int endswith(const char* withwhat, const char* what) 
{ 
    int l1 = strlen(withwhat); 
    int l2 = strlen(what); 
    if (l1 > l2) 
     return 0; 

    return strcmp(withwhat, what + (l2 - l1)) == 0; 
} 
1

sólo realizar if (strcmp(str1+strlen(str1)-4, str2+strlen(str2)-4) == 0) {}.

Asegúrate de que ambas cadenas midan al menos 4 caracteres.

+2

Es posible que necesite '& str1 [strlen (str1) -4]' etc. – Vlad

+0

Editado, muchas gracias. –

0

Aquí es una función genérica para probar:

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; 
} 
0
#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; 
} 
+0

¡Bienvenido a Stack Overflow! En lugar de solo publicar un bloque de código, explique por qué este código resuelve el problema planteado. Sin una explicación, esta no es una respuesta. – Artemix

0

¿Qué tal esto ...

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

char *strrchr(const char *str, int c) - devuelve un puntero a la última coincidencia de carbón que se encuentra en la cadena, incluyendo el carácter NULL si así lo especifica. En este caso, lo uso para obtener un puntero al final de la cadena y luego muevo el puntero 4 pasos hacia atrás, dando así un puntero a los últimos 4 caracteres de la cadena.

Luego comparo los últimos 4 caracteres, con ".avi" y si coinciden, strcmp devuelve un 0 o lógica FALSE, que invierto en mi condición 'if'.

Cuestiones relacionadas