Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Escriba una rutina que le de formato al contenido de un edit. El formato
- deseado consiste en pasar a mayúscula la primer letra de cada palabra y
- dejar el resto de los caracteres en minúscula.
- */
- /*
- Mayusculas = [65, 90]
- Minusculas = [97, 122]
- Mayuscula a minuscula-> +32
- Minuscula a mayuscula-> -32
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdbool.h>
- #include <string.h>
- bool es_minuscula(char a) {
- return (a >= 'a' && a <= 'z');
- }
- bool es_mayuscula(char a) {
- return (a >= 'A' && a <= 'Z');
- }
- char a_mayuscula(char a) {
- if (es_minuscula(a))
- return (char)(a - 32);
- return a;
- }
- char a_minuscula(char a) {
- if (es_mayuscula(a))
- return (char)(a + 32);
- return a;
- }
- char* leer_palabra(FILE* f, int* seek_escritura) {
- fseek(f, *seek_escritura, SEEK_SET);
- char c;
- size_t longitud_palabra = 0;
- while ( (c = fgetc(f)) != ' ' && c != '\n' && c!= EOF) {
- longitud_palabra++;
- }
- if (longitud_palabra == 0 && c == EOF) return NULL;
- fseek(f, *seek_escritura, SEEK_SET);
- char* palabra = malloc(sizeof(char) * (longitud_palabra + 1));
- for (size_t i = 0; i < longitud_palabra; i++){
- palabra[i] = fgetc(f);
- }
- palabra[longitud_palabra] = '\0';
- fgetc(f); // Si estoy en un espacio o un \n avanzo, si estoy en eof me mantengo.
- *seek_escritura = ftell(f);
- return palabra;
- }
- void escribir_letra(FILE* f, int* seek_escritura, char c) {
- fseek(f, *seek_escritura, SEEK_SET);
- fputc(c, f);
- *seek_escritura = ftell(f);
- }
- int main() {
- int seek_lectura = 0;
- int seek_escritura = 0;
- char* palabra;
- FILE* f = fopen("edit.txt", "r+");
- if (!f) return -1;
- while ((palabra = leer_palabra(f, &seek_lectura)) != NULL) {
- size_t len_palabra = strlen(palabra);
- for (size_t i = 0; i < len_palabra; i++){
- char c = palabra[i];
- if (i == 0)
- c = a_mayuscula(c);
- else
- c = a_minuscula(c);
- escribir_letra(f, &seek_escritura, c);
- }
- free(palabra);
- escribir_letra(f, &seek_escritura, ' ');
- }
- fclose(f);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement