Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ayuda con un programa que modifica un texto.

Estas en el tema de Ayuda con un programa que modifica un texto. en el foro de C/C++ en Foros del Web. Hola, mi problema consiste en que tengo que crear un programa que , a partir de un texto introducido, me ponga cada frase en una ...
  #1 (permalink)  
Antiguo 04/11/2010, 13:59
 
Fecha de Ingreso: octubre-2010
Mensajes: 6
Antigüedad: 13 años, 6 meses
Puntos: 0
Ayuda con un programa que modifica un texto.

Hola, mi problema consiste en que tengo que crear un programa que , a partir de un texto introducido, me ponga cada frase en una columna, necesitaria hacerlo por matrices, es decir, en cada posicion de la matriz guardar una palabra del texto, y a partir de ahi, que el programa me modifique el texto.

Por ejemplo:

si yo introduzco el siguiente texto: Esto es un texto ejemplo. (el resultado tendria que ser).

Esto
es
un
texto
ejemplo.

Como ya he dicho antes, he de meter cada palabra en su lugar correspondiente de una matriz que defino en el programa, y mi problema es que no se como empezar esto.
supongamos que un texto que ponemos tiene 1000 caracteres, las filas y columnas vienen determinadas por la palabra mas larga
Ej. una palabra tiene 20 caracteres, entonces 20 son las columnas, y 50 filas, que son las palabras qe caben.
*50*20=1000

A alguien se le ocurre algo?
Muchas gracias de antemano.

Última edición por hoen; 04/11/2010 a las 14:36
  #2 (permalink)  
Antiguo 04/11/2010, 15:59
Avatar de Munire  
Fecha de Ingreso: julio-2010
Ubicación: en el ciberdespacio (España)
Mensajes: 150
Antigüedad: 13 años, 9 meses
Puntos: 4
Respuesta: Ayuda con un programa que modifica un texto.

a mi se me ocurre que almacenes la cadena "Esto es un texto ejemplo" en un char y vayas leyendo letra por letra hasta que encuentres un espacio:

if(cadena[i] == ' ')
{
}

entonces las anteriores letras las guardas en otro char.


otra forma seria igual que la anterior, leer letra por letra e imprimir la letra si es distinta de espacio, y si es igual imprimir un \n, para que salte a la siguiente linea y escriba la otra palabra.

Código:
pseudocodigo:

for i = 1, 2, 3...
{
     if(cadena[i] != ' ')
         {
                imprimir cadena[i]; 
          } 
      else
           imprimir \n  

}
no se si sera buena idea pero es lo que se me ha ocurrido...

saludos
  #3 (permalink)  
Antiguo 04/11/2010, 19:50
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Ayuda con un programa que modifica un texto.

Necesitas simplemente imprimir en columnas, o almacenarlas en una matriz??

Para almacenarla en una matriz, te recomiendo que uses memoria dinamica para contruirla. De esta formas no necesitaras que la matriz sea perfectamente cuadrada.

Mas o menos seria asi.
Primero te fijas cuantas palabras hay (variable n).
Luego reservas memoria para n punteros a char.
Ahora recorres la cadena, detectanto palabra por palabra (Buscar espacios.)
llevas un contardor que indica el numero de palabra, y otro la cantidad de letras.
Entonces por cada palabra con posicion i, en el array que reservaste antes en la posicion i reservas espacio para la cantidad de letras que tenga la palabra +1 asi cave el fin de cadena. Por ultimo con copias esa palabra a esa posicion. Y listo

SI tienes dudas te podemos ir ayudando.
  #4 (permalink)  
Antiguo 09/11/2010, 14:55
 
Fecha de Ingreso: octubre-2010
Mensajes: 6
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Ayuda con un programa que modifica un texto.

muchas gracias, logré completar el código.

Última edición por hoen; 09/11/2010 a las 15:02
  #5 (permalink)  
Antiguo 10/11/2010, 09:30
 
Fecha de Ingreso: octubre-2010
Mensajes: 6
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Ayuda con un programa que modifica un texto.

Bien completé el código, y me pedian otra cosa que tambíen hize, la segunda parte de mi problema trataba de lo siguiente:

A partir de una frase "Esto es un texto ejemplo$" (la $ es el caracter que me indica el final de frase), tenia que ponerla de la siguiente manera :

Esto
es
un
texto
ejemplo

es decir, la frase, ponerla en una sola columna, como se ve anteriormente (utilizando una matriz..), a partir de ahí, tenia que leer las letras por columnas y pintarlas por pantalla, de manera que me quedase así (los espacios se tienen en cuenta como si fuese una letra):

Eeutessnejt xeo tm op l o

(este es el resultado final que imprime por pantalla mi programa cifrador de textos).


Pero tengo otro problema:

Ahora, me dan una frase cifrada, siguiendo las características descritas anteriormente, y yo tengo que ser capaz de descifrarla y ponerla como una frase normal, me dan una pista (el programa tiene que pedir al usuario el nombre de palabras que contiene la frase y a partir de ahí descifrarlo).

Se os ocurre algo?

Muchas gracias de antemano.
  #6 (permalink)  
Antiguo 10/11/2010, 16:24
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Ayuda con un programa que modifica un texto.

sabiendo el numero de palabras. si divides la longitud de la cadena sobre el numero de palabras eso te da el numero de letras por palabeas. Luegos armas una matriz con esas dimensiones.

for j = 1 to length(cadena ) / n
for i = 1 to n (numero de palabas)
matriz[i][j] = cadena[j*n+i]
end
end

Mas o menos es asi. Pero chequea los indices. Puede ser que esten mal
  #7 (permalink)  
Antiguo 11/11/2010, 15:03
 
Fecha de Ingreso: octubre-2010
Mensajes: 6
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Ayuda con un programa que modifica un texto.

bufff, no hay manera, ademas tengo q leer la frase cifrada desde un archivo, he declarado las variables , pero cuando llego a la parte de, segun el numero de palabras q haya introducido el usuario, por ejemplo 4, me vaya colocando cada 4 letras en una columna (contando los espacios como letras) , y a continuacion, me lea por filas, no me aclaro.


Si se os ocurre algo, os estare agradecido.

He estado pensando y se me ha ocurrido algo asi:

while (cadena[z]!=feof(f)) {


matriz[i][j]=cadena[z];


for (j=0; j<30; j++) {
for (i=0; i<=n; i++) {

if (i==n){

j++;
i=0;

}
else i++;
z++;
}
}

}



Muchas gracias

Última edición por hoen; 13/11/2010 a las 08:29

Etiquetas: programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:13.