Buenos dias muchachos...
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:
#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++;
}
}
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
Código:
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';
}
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.
Estoy abierto a cualquier crítica o sugerencia sobre el estilo de programacion y la calidad del algoritmo
Un saludo y gracias por adelantado