Estuve navegando el subforo de programacion y realmente me parece muy buena la ayuda que dan
Estoy aprendiendo C desde hace poco y estuve haciendo un programita que borra los espacios de mas en las lineas ingresadas por el usuario.
El código es el siguiente
Código:
El programita funciona bien, pero en mi opinion la función blanks es un poco ineficiente y podria mejorarse. Un amigo me sugirió una de este estilo#include <stdio.h> #define MAXLINE 1000 int getline(char s[], int lim); /* Prototipo de la funcion getline */ void blanks(char s[]); /* Prototipo de la función blanks */ /* main: Borra los espacios de mas en todas las lineas que ingrese el usuario hasta que se pulse CTRL+C */ int main(void) { int size; char string[MAXLINE]; size = getline(string, MAXLINE); while (size != MAXLINE) { blanks(string); printf("%s", string); size = getline(string, MAXLINE); } return 0; } /* getline: Recibe una linea de texto ingresada por el usuario. Devuelve su longitud */ int getline(char s[], int lim) { int i, c; for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; i++) s[i] = c; if (i == 0 && c == EOF) i = MAXLINE; if (c == '\n') { s[i] = '\n'; i++; } s[i] = '\0'; return i; } /* blanks: Borra los espacios que esten de mas en una linea Ejemplos: Entrada: ' Hola ' Salida: 'Hola' Entrada: ' Hola que tal' Salida: 'Hola que tal' */ void blanks(char s[]) { int i = 0; int b; while (s[i] != '\0') { if (s[0] == ' ' || (s[i] == ' ' && s[i+1] == ' ')) { b = i; while (s[i] != '\0') { s[i] = s[i+1]; i++; } i = b; } else i++; } }
Código:
Es mas eficiente el algoritmo, pero aún así falla cuando se agregan espacios al principio, podria poner un while al final y mover todo el vector a la izquierda solucionando fácilmente el problema, pero quería saber si a ustedes se les ocurría una solucion mejor.void blanks(char s[]) { int r=0; //read index int w=0; //write index while(s[r] != '\0') { while(s[r] == ' ' && s[r+1] == ' ') r++; s[w]=s[r]; r++; w++; } s[w]='\0'; }
Estoy abierto a cualquier crítica o sugerencia sobre el estilo de programacion y la calidad del algoritmo
Un saludo y gracias por adelantado