Advertisement
tomasaccini

Untitled

Jul 18th, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.20 KB | None | 0 0
  1. /*
  2. Escriba una rutina que le de formato al contenido de un edit. El formato
  3. deseado consiste en pasar a mayúscula la primer letra de cada palabra y
  4. dejar el resto de los caracteres en minúscula.
  5. */
  6.  
  7. /*
  8. Mayusculas = [65, 90]
  9. Minusculas = [97, 122]
  10. Mayuscula a minuscula-> +32
  11. Minuscula a mayuscula-> -32
  12. */
  13.  
  14. #include <stdio.h>
  15. #include <stdlib.h>
  16. #include <stdbool.h>
  17. #include <string.h>
  18.  
  19.  
  20. bool es_minuscula(char a) {
  21.     return (a >= 'a' && a <= 'z');
  22. }
  23.  
  24. bool es_mayuscula(char a) {
  25.     return (a >= 'A' && a <= 'Z');
  26. }
  27.  
  28. char a_mayuscula(char a) {
  29.     if (es_minuscula(a))
  30.         return (char)(a - 32);
  31.     return a;
  32. }
  33.  
  34. char a_minuscula(char a) {
  35.     if (es_mayuscula(a))
  36.         return (char)(a + 32);
  37.     return a;
  38. }
  39.  
  40. char* leer_palabra(FILE* f, int* seek_escritura) {
  41.     fseek(f, *seek_escritura, SEEK_SET);
  42.     char c;
  43.     size_t longitud_palabra = 0;
  44.     while ( (c = fgetc(f)) != ' ' && c != '\n' && c!= EOF) {
  45.         longitud_palabra++;
  46.     }
  47.     if (longitud_palabra == 0 && c == EOF) return NULL;
  48.     fseek(f, *seek_escritura, SEEK_SET);
  49.  
  50.     char* palabra = malloc(sizeof(char) * (longitud_palabra + 1));
  51.     for (size_t i = 0; i < longitud_palabra; i++){
  52.         palabra[i] = fgetc(f);
  53.     }
  54.     palabra[longitud_palabra] = '\0';
  55.     fgetc(f); // Si estoy en un espacio o un \n avanzo, si estoy en eof me mantengo.
  56.     *seek_escritura = ftell(f);
  57.     return palabra;
  58. }
  59.  
  60. void escribir_letra(FILE* f, int* seek_escritura, char c) {
  61.     fseek(f, *seek_escritura, SEEK_SET);
  62.     fputc(c, f);
  63.     *seek_escritura = ftell(f);
  64. }
  65.  
  66. int main() {
  67.     int seek_lectura = 0;
  68.     int seek_escritura = 0;
  69.     char* palabra;
  70.     FILE* f = fopen("edit.txt", "r+");
  71.     if (!f) return -1;
  72.  
  73.     while ((palabra = leer_palabra(f, &seek_lectura)) != NULL) {
  74.         size_t len_palabra = strlen(palabra);
  75.         for (size_t i = 0; i < len_palabra; i++){
  76.             char c = palabra[i];
  77.             if (i == 0)
  78.                 c = a_mayuscula(c);
  79.             else
  80.                 c = a_minuscula(c);
  81.             escribir_letra(f, &seek_escritura, c);
  82.         }
  83.         free(palabra);
  84.         escribir_letra(f, &seek_escritura, ' ');
  85.     }
  86.     fclose(f);
  87.     return 0;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement