Skip to content

Instantly share code, notes, and snippets.

@fernandolopez
Created May 8, 2020 13:47
Show Gist options
  • Save fernandolopez/f15977c94f7a6808bd736b4933695410 to your computer and use it in GitHub Desktop.
Save fernandolopez/f15977c94f7a6808bd736b4933695410 to your computer and use it in GitHub Desktop.
palindromo.c
#include <stdio.h> // por printf
#include <ctype.h> // por isalpha y tolower
#include <string.h> // por strlen y memcpy
int es_palindromo(const char *word) {
int i, j;
int ultimo = strlen(word) - 1;
// Descomentar para ver que viene en word en cada invocación
// printf("- {%s}\n", word);
for (i = 0, j = ultimo; i < j; i++, j--) {
if (tolower(word[i]) != tolower(word[j])) {
return 0;
}
}
return 1;
}
int main() {
int capicua = 0;
char palabra[100]; // Acá vamos a ir guardando cada palabra
char *frase = "Hola, chau Ababa. Abalaba aibofobia Ana ala arenera arepera anilina aviva Malayalam";
// Iteramos hasta el final de la frase
for (int i = 0; frase[i] != '\0'; i++) {
// Si encuentro una letra, ese es el inicio de la palabra
if (isalpha(frase[i])) {
int j;
// Encuentro el final de la palabra (itero hasta que no haya letras)
for (j = i + 1; isalpha(frase[j]); j++);
// Con el principio y tamaño de la palabra (j - i) puedo copiarla a otra variable para más comodidad
memcpy(palabra, &frase[i], j - i);
// Para ser una string de C válida tengo que agregar un \0 al final
palabra[j - i] = '\0';
// Si es palindromo actualizo la variable capicua
if (es_palindromo(palabra)) capicua++;
// Adelanto el indice i, para saltear la palabra ya procesada.
// j es el caracter justo después de la palabra, pero tengo
// que restarle 1, porque el for va a incrementar el valor de i
// salteandose un caracter.
i = j - 1;
}
}
printf("Hay %d palabras capicua\n", capicua);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment