Imagine que tengo dos cadenas, una de ellas es una url como "/sdcard/test.avi" y la otra es "/ sdcard/test". mkv ". Quiero escribir una instrucción if que mire si los últimos cuatro caracteres de la cadena son ".avi" o no en C. ¿Cómo puedo hacer esto? ¿Usando strcmp o qué y cómo?Cómo comparar los últimos n caracteres de una cadena con otra cadena en C
Respuesta
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.
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;
}
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.
Es posible que necesite '& str1 [strlen (str1) -4]' etc. – Vlad
Editado, muchas gracias. –
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;
}
#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;
}
¡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
¿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'.
- 1. ¿Cómo elimino los últimos n caracteres de una cadena?
- 2. Extrayendo los últimos n caracteres de una cadena en R
- 3. Ruby, elimina los últimos N caracteres de una cadena?
- 4. objetivo-c obtener los últimos 2 caracteres de una cadena?
- 5. Eliminación de los últimos caracteres en una cadena XSLT
- 6. Modificar los dos últimos caracteres de una cadena en Perl
- 7. Extracción de los dos últimos caracteres de una cadena numérica
- 8. cómo cortar los últimos n bytes de una cadena en corte de cadena bash?
- 9. Obtener los 4 últimos caracteres de una cadena
- 10. Obtenga los últimos 5 caracteres en una cadena
- 11. Cómo obtener los últimos caracteres en una cadena en Java, independientemente del tamaño de cadena
- 12. Python Eliminar los últimos 3 caracteres de una cadena
- 13. C# Dividir una cadena por otra cadena
- 14. Eliminar los últimos caracteres de una cadena en C#. Una manera elegante?
- 15. ¿Cómo puedo obtener últimos caracteres de una cadena utilizando JavaScript
- 16. ¿Cómo eliminar los dos primeros y los últimos dos caracteres en una cadena?
- 17. hacer una cadena de N caracteres
- 18. ¿Cómo se pueden leer solo 20 caracteres de una cadena y compararlos con otra cadena?
- 19. cómo comparar cadena con enum en C#
- 20. ¿Cómo puedo comparar parte de una cadena?
- 21. cortar los últimos caracteres
- 22. xcode corta los últimos caracteres de la cadena
- 23. Scala: obtenga los últimos dos caracteres de la cadena
- 24. últimos caracteres de una cadena K en Perl
- 25. Recortar los últimos 4 caracteres de la cadena?
- 26. uniq - omitiendo los últimos caracteres/campos al comparar líneas
- 27. Devolviendo los primeros N caracteres de una cadena Unicode
- 28. ¿Cómo comparar BSTR contra una cadena en c/C++?
- 29. Eliminando N primeros caracteres de la cadena
- 30. Reemplazar los caracteres incorrectos de una Cadena con caracteres incorrectos
Gracias. Ha solucionado el problema. – sjor
Su solución simple. ¡Lo acabo de necesitar hoy! Gracias. –