Palindromo en un archivo

Iniciado por Eva93, 26 Agosto 2013, 20:12 PM

0 Miembros y 2 Visitantes están viendo este tema.

Eva93

Hola compañeros, tengo una duda sobre un programa.

He hecho un programa donde muestra en pantalla el palindromo de una cadena de arrays.

#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std;

void cadenaInv(char cad[], char cadinv[],int len);

int main()
{

char cad[100];
char cadinv[100];
int len;

cout << "Introduzca una cadena de carcteres" << endl;
gets(cad);

len=strlen(cad);

cadenaInv(cad,cadinv,len);

cout << endl << endl;


cout << "el palindromo es:  " << strcat(cad, cadinv)  << endl;

return 0;
}

void cadenaInv(char cad[],char cadinv[],int len){
int i;
for(i=0;i<len;i++)
cadinv[len-1-i]=cad;
cadinv[len]='\o';}




Ahora aqui viene mi problema, me gustaría aprovechar este programa para leer un archivo inpunt.txt donde se coloca el texto original, y un archivo de salida output.txt donde salga el palindromo de este texto.

Me gustaría intentarlo por mi misma pero necesito una pequeña ayuda ya que no se como hacer esto en archivos.

Saludos  :D

eferion

Los algoritmos no funcionan sobre archivos. Tienes que leer el contenido del archivo y almacenarlo en tu programa (usa la clase string en vez de arrays de Chars). Después le aplicas el algoritmo y el resultado lo almacenas en un nuevo fichero.

Para manejar los archivos mira te las clases stream ( istream, ostream, etc. ). Hay muchos ejemplos y tutoriales por internet.

xiruko

siempre puedes hacer en la linea de comandos:

./programa > output.txt < input.txt

saludos!

eferion

Cita de: xiruko en 26 Agosto 2013, 21:13 PM
siempre puedes hacer en la linea de comandos:

./programa > output.txt < input.txt

saludos!

Lo que pasa es que imagino que su idea es aprender a manejar ficheros...

Alien-Z


ecfisa

#5
Hola Eva93.

Aunque me descoloca el uso de iostream y namespace, por el resto de tu código pareciera que estas usando C.

Si es así, en líneas generales, podrías hacer:


#include <stdio.h>
#include <string.h>

void cadenaInv(char cad[],char cadinv[])
{
 int i, len = strlen(cad);

 for(i = 0; i<len; i++)
   cadinv[len-i-1] = cad[i];
 cadinv[len] = '\0';
}


int main()
{
 FILE *input, *output;
 char str[100], inv[100];
 int i = 0;

 if ((input=fopen("input.txt", "rt")) == NULL) {
   perror("No se puede abrir el archivo de lectura\n");
   return 1;
 }

 if ((output=fopen("output.txt", "wt")) == NULL) {
   perror("No se puede abrir el archvio de escritura\n");
   return 1;
 }

 while (!feof(input))
   str[i++] = fgetc(input);
 str[i] = '\0';

 cadenaInv(str, inv);

 i = 0;
 while (inv[i++])
   fputc(inv[i], output);

 fclose(input);
 fclose(output);
}


Saludos :)


EI: juntando mensajes.


Hola de nuevo.

Mirando mejor veo que se me escapó cout... Así que en C++ y suponiendo que en el archivo de texto hay una sola palabra o frase, podría ser:

Código (cpp) [Seleccionar]

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main()
{
  ifstream input("input.txt", ios_base::in);
  ofstream output("output.txt", ios_base::out);
  string st;

  getline(input,st);
  input.close();

  st = string(st.rbegin(), st.rend());
  output << st;
  output.close();
}


Saludos :)

Eva93

Cita de: ecfisa en 29 Agosto 2013, 20:26 PM
Hola Eva93.

Aunque me descoloca el uso de iostream y namespace, por el resto de tu código pareciera que estas usando C.

Si es así, en líneas generales, podrías hacer:


#include <stdio.h>
#include <string.h>

void cadenaInv(char cad[],char cadinv[])
{
 int i, len = strlen(cad);

 for(i = 0; i<len; i++)
   cadinv[len-i-1] = cad[i];
 cadinv[len] = '\0';
}


int main()
{
 FILE *input, *output;
 char str[100], inv[100];
 int i = 0;

 if ((input=fopen("input.txt", "rt")) == NULL) {
   perror("No se puede abrir el archivo de lectura\n");
   return 1;
 }

 if ((output=fopen("output.txt", "wt")) == NULL) {
   perror("No se puede abrir el archvio de escritura\n");
   return 1;
 }

 while (!feof(input))
   str[i++] = fgetc(input);
 str[i] = '\0';

 cadenaInv(str, inv);

 i = 0;
 while (inv[i++])
   fputc(inv[i], output);

 fclose(input);
 fclose(output);
}


Saludos :)

muchas gracias pero todavia detecto un error.

con este programa si por ejemplo ponemos "Hola mundo", el 2º fichero sale "odnum aloH".  cuando en realidad me gustaría que el 2º fichero saliese "Hola mundo odnum aloH"

do-while

¡Buenas!

Si ya sabes escribir "odnum aloH", deberías de saber escribir "Hola mundo odnum aloH"...

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

Eva93

Cita de: do-while en 30 Agosto 2013, 12:50 PM
¡Buenas!

Si ya sabes escribir "odnum aloH", deberías de saber escribir "Hola mundo odnum aloH"...

¡Saludos!

Ya esta me salio el palindromo completo en el archivo ;-) ;-) ;-), gracias.