• Domingo 17 de Noviembre de 2024, 19:59

Autor Tema:  Ordenar Frase  (Leído 1040 veces)

gabrielz1

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Ordenar Frase
« en: Viernes 23 de Diciembre de 2005, 06:55 »
0
hola amigos de c/c++ nose si me pueden ayudar.
Lo que necesito es saber como puedo controlar una frase.

Bueno por ejemplo tengo una cadena de caracteres como la siguiente.

cadena = "hola amigos de c/c++ nesesito que esta frase se reparta en diferentes lineas";

en la cadena tenemos 76 caracteres. lo que necesito es queesa cadena se reparta en tres filas de 24 caracteres.
                         
                         hola amigos de c/c++
                         nesesito que esta frase  
                         se reparta en diferentes
                          lineas

si nos damos cuenta las lineas son 4 puesto que las palabras no se cortaron y se agregaron caracteres nulos y la palabra entera como no cabia en la linea de 24 se tubo que pasar a la siguiente linea.

Bueno amigos no se si me pueden ayudar en esto.
les agradesco anticipadamente.

punteroNULO

  • Miembro activo
  • **
  • Mensajes: 73
    • Ver Perfil
Re: Ordenar Frase
« Respuesta #1 en: Lunes 26 de Diciembre de 2005, 18:16 »
0
Una posibilidad para realizarlo seria la siguiente:

Me imagino que la variable cadena es puntero a carácter, terminado en puntero nulo.
Código: Text
  1. char * cadena;
  2.  

Creamos un vector para guardar cada una de las líneas (si sabemos el número de líneas finales, sino hay que crearlo dinámicamente)
Código: Text
  1. char * lineas[numerolineas];
  2.  

Vamos a utilizar el espacio de "cadena" para crear las líneas, sin tener que copiar bloques de memoria.

Evidentemente la primera línea comienza en el mismo lugar que cadena.
Código: Text
  1. lineas[0] = cadena;
  2.  

Creamos una variable para indicar el lugar actual dentro de la cadena, por ejemplo int actual.

Actual tendrá ahora el valor del ancho de la linea (24 en este caso).

Comenzamos el bucle hasta el valor de actual se salga del tamaño de la cadena.
            Comprobamos si la posición actual es un espacio
           
Código: Text
  1. cadena[actual]== ' '
  2.  
           Recorremos hasta encontrar el espacio y lo cambiamos por el fin de cadena '\0'
            La siguiente linea comienza en la posición posterior a la actual
           
Código: Text
  1. lineas[i]=&cadena[++actual];
  2.  
          Aumentamos el valor actual en el valor de ancho de linea
fin del bucle
y terminado.

Por ejemplo. Para el caso expuesto:
cadena = "hola amigos de c/c++ nesesito que esta frase se reparta en diferentes lineas\0";

quedaria de la forma
cadena = "hola amigos de c/c++\0nesesito que esta frase\0se reparta en diferentes\0lineas\0";
lineas[0]=&cadena[0];
lineas[1]=&cadena[21];
lineas[2]=&cadena[45];
lineas[3]=&cadena[70];

Cuatro lineas.

Hay esta la forma de hacerlo, solo hay que transformarlo en código.

Hasta luego.