Funcion que borra espacios excesivos

bloodhound

Hola,

Estoy tratando de hacer la función ya descrita en el titulo. Lo que pasa es que no se porqué no lo consigo.
Me explico dada esta cadena por ejemplo: " hola compañeros mediavideros "
Devuelva: "hola compañeros mediavideros"

De partida cuento con la cadena de entrada, y la de salida.
Entonces lo que intento es que siguiendo estas condiciones:

si cadena de entrada [ i] != ' ' copia en la cadena de salida[j]

si el caracter actual es != ' ', el siguiente es ' ' y el contador de palabras >1	

1. introduce un espacio(caracter = ' ')

2.pasa al caracter siguiente

3.disminuye el contador de palabras

Creo que el algoritmo no esta bien implementado. Alguna idea que se os ocurra? Gracias!

Dios que cabeza, el lenguaje es C. Lo del php si que me sonaba, pero aun así es una función hecha por mí.

VipeR_CS

Lenguaje? En php por ejemplo ya lo tienes hecho: http://php.net/manual/en/function.trim.php

maRc

¿Sólo borra los que hay al principio y al final de la cadena, o también borra si hay dos seguidos entre dos palabras?

Para lo primero, recorre la cadena desde el principio hasta que no encuentres un espacio y te quedas con el índice. Luego recorres la cadena desde el final hacia atrás y te quedas con el índice del primer caracter que no es espacio. Luego, copias la cadena entre los índices y ya está.

Para lo segundo, recorre la cadena desde el principio copiandola caracter a caracter. Si te encuentras un espacio, lo copias, sigues recorriendo mientras hasta que te encuentres un caracter distinto, que copias y sigues recorriendola como en el bucle anterior.

Pista: usa dos bucles anidados (for, while, do while, etc) para el segundo método.

bloodhound

Pues la verdad que busco una mezcla entre los 2. Quiero que me borre los que sobran al principio y al final, pero también si hay 2 entre palabras.
Otra forma que se me había ocurrido es almacenar palabra por palabra en una variable auxiliar y cuando cada una este completa, copiarla y añadir un espacio, pero aquí me atasco porque no se como hacerlo.

VipeR_CS

Pues yo estoy aprendiendo C ahora también así que no soy el más indicado para guiarte, pero échale un ojo a esta librería http://es.wikipedia.org/wiki/String.h

Se me ocurre que puedes usar strchr para buscar los espacios de la string que le indiques y reemplazarlos por un espacio vacío. Pero claro, igual es una burrada y hay mil formas más fáciles xD

Edit: ahora que me acuerdo entre los ejercicios que hice, uno fue un programa que te decía cuantas veces se repetía una letra en una palabra. Supongo que no sería difícil modificarlo para que buscara espacios y los reemplazara. Eso sí, está con punteros y es un poco caótico xD

Buffoncete

http://www.gnu.org/s/libc/manual/html_node/Finding-Tokens-in-a-String.html

Soltrac

http://luauf.com/2008/05/17/funcion-split-en-c/

Luego las juntas separándolas por un espacio.

Happy ending.

Usuarios habituales

  • Soltrac
  • Buffoncete
  • VipeR_CS
  • bloodhound
  • maRc