Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- //
- // VerificarPar : Verifica si un numero es par o impar
- //
- bool VerificarPar(int Numero)
- {
- if ((Numero % 2) == 0)
- {
- return true;
- }
- return false;
- }
- //
- // ReverseString : invierte las letras de la palabra
- // por ejemplo : "laho" la transformaria en "hola"
- //
- char * ReverseString(char * String)
- {
- //
- // Variable a retornar
- //
- static char szResult[256];
- //
- // Obtenemos la longitud de la palabra utilizando strlen
- //
- int Len = strlen(String);
- //
- // Utilizamos un bucle del tipo for para copiar el texto
- //
- for( int i = Len - 1; i >= 0; i--)
- szResult[(Len - 1) - i] = String[i];
- //
- // las string en C tienen que terminar en 0.
- //
- szResult[Len] = '\0';
- //
- // Devolvemos el resultado
- //
- return szResult;
- }
- //
- // CambiarPalabra : intercambia las palabras de los extremos manteniendo las 3 letras del centro
- // ceaneam > amanece
- // ouchm > mucho
- //
- char * CambiarPalabra(char * String)
- {
- //
- // Variable a retornar
- //
- static char szResult[256];
- //
- // Puntero para copiar texto
- //
- char * pTarget;
- //
- // Obtenemos la longitud de la palabra utilizando strlen
- //
- int Len = strlen(String);
- //
- // Calculamos la cantidad de letras a intercambiar
- //
- int iCambiar = (Len - 3) / 2;
- //
- // Hacemos que el puntero pTarget apunte a las ultimas letras a intercambiar
- //
- pTarget = String + (Len - iCambiar);
- //
- // Copiamos las ultimas letras a intercambiar al principio de szResult
- //
- strncpy(szResult, pTarget, iCambiar);
- //
- // Hacemos que el puntero pTarget apunte a las 3 letras del medio (las que no se intercambian)
- //
- pTarget = String + iCambiar;
- //
- // Copiamos las 3 letras del medio.
- //
- strncpy(szResult + iCambiar, pTarget, 3);
- //
- // Hacemos que el puntero pTarget apunte a las primeras letras a intercambiar
- //
- pTarget = String;
- //
- // Copiamos las primeras letras al final de szResult
- //
- strncpy(szResult + (Len - iCambiar), pTarget, iCambiar);
- // NOTA : aca no es necesario que szResult termine en 0 porque strncpy ya lo hace.
- //
- // Retornamos szResult que contiene la palabra intercambiada
- //
- return szResult;
- }
- int main(int argc, char * argv[])
- {
- //
- // iCount va a tener la cantidad de palabras a leer
- //
- int iCount = 0;
- //
- // pInFile va a ser el archivo a leer.
- //
- FILE * fInFile = NULL;
- //
- // pOutFile va a ser el archivo para guardar el resultado
- //
- FILE * fOutFile = NULL;
- //
- // szOutput va a ser el texto final para guardarlo en el archivo refran.out
- //
- char szOutput[1024];
- //
- // szPalabra va a servir para leer las palabras de refran.in
- //
- char szPalabra[256];
- //
- // Iniciamos el array szOutput a 0
- //
- memset(szOutput, 0, sizeof(szOutput));
- //
- // Iniciamos el array szPalabra a 0
- //
- memset(szPalabra, 0, sizeof(szPalabra));
- //
- // Abrimos el archivo refran.in
- //
- fInFile = fopen("refran.in", "r");
- //
- // Verificamos si se abrio correctamente, si no mostramos un error.
- //
- if (fInFile == NULL)
- {
- printf("[Error] No se encuentra el archivo refran.in!\n");
- system("PAUSE");
- return 0;
- }
- //
- // Leemos la cantidad de palabras
- //
- fscanf(fInFile, "%d", &iCount);
- //
- // Verificamos que la cantidad de palabras sea mayor a 0
- //
- if ( iCount > 0 )
- {
- //
- // Abrimos el archivo donde sera guardado el texto final
- //
- fOutFile = fopen("./refran.out", "w");
- //
- // Verificamos si se abrio correctamente, si no mostramos un error.
- //
- if (fOutFile == NULL)
- {
- printf("[Error] No se pudo acceder al archivo refran.out!\n");
- system("PAUSE");
- return 0;
- }
- //
- // Utilizamos un bucle de tipo for para leer la cantidad de palabras y gardarlas en szOutput
- //
- for (int i = 0; i < iCount; i++ )
- {
- //
- // Leemos la palabra
- //
- fscanf(fInFile, "%s\n", szPalabra);
- //
- // Obtenemos la longitud de la palabra
- //
- int iWordLen = strlen(szPalabra);
- //
- // Verificamos que la longitud de la palabra sea mayor a 0
- //
- if ( iWordLen > 0 )
- {
- //
- // Si la longitud de la palabra es 1 o 3, la guardamos tal cual esta en el archivo refran.in
- //
- if ( iWordLen == 1 || iWordLen == 3 )
- {
- strcat(szOutput, szPalabra);
- }
- else if( VerificarPar(iWordLen) ) // Verificamos si la palabra es Par
- {
- //
- // si la palabra es par utilizamos la funcion ReverseString para invertirla y la agregamos
- // a szOutput
- //
- strcat(szOutput, ReverseString(szPalabra));
- }
- else // La variable es impar
- {
- //
- // si la palabra es impar tenemos que intercambiar las letras
- //
- strcat(szOutput, CambiarPalabra(szPalabra));
- }
- //
- // verificamos que no sea la ultima palabra
- //
- if ( i + 1 < iCount )
- {
- //
- // Le agregamos un espacio
- //
- strcat(szOutput, " ");
- }
- }
- }
- //
- // Escribimos el refran en el archivo refran.out
- //
- fprintf(fOutFile, "%s.", szOutput);
- //
- // Cerramos el archivo refran.out
- //
- fclose(fOutFile);
- }
- //
- // Cerramos el archivo refran.in
- //
- fclose(fInFile);
- system("PAUSE");
- return 0;
- }
Add Comment
Please, Sign In to add comment