Created
May 8, 2020 13:47
-
-
Save fernandolopez/f15977c94f7a6808bd736b4933695410 to your computer and use it in GitHub Desktop.
palindromo.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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