Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Eva93 en 26 Agosto 2013, 20:12 pm



Título: Palindromo en un archivo
Publicado por: Eva93 en 26 Agosto 2013, 20:12 pm
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


Título: Re: Palindromo en un archivo
Publicado por: eferion en 26 Agosto 2013, 21:04 pm
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.


Título: Re: Palindromo en un archivo
Publicado por: xiruko en 26 Agosto 2013, 21:13 pm
siempre puedes hacer en la linea de comandos:

Código:
./programa > output.txt < input.txt

saludos!


Título: Re: Palindromo en un archivo
Publicado por: eferion en 26 Agosto 2013, 22:53 pm
siempre puedes hacer en la linea de comandos:

Código:
./programa > output.txt < input.txt

saludos!

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


Título: Re: Palindromo en un archivo
Publicado por: Alien-Z en 27 Agosto 2013, 11:20 am
Manejo de ficheros en C++: http://c.conclase.net/curso/?cap=039

Saludos.


Título: Re: Palindromo en un archivo
Publicado por: 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:

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. void cadenaInv(char cad[],char cadinv[])
  5. {
  6.  int i, len = strlen(cad);
  7.  
  8.  for(i = 0; i<len; i++)
  9.    cadinv[len-i-1] = cad[i];
  10.  cadinv[len] = '\0';
  11. }
  12.  
  13.  
  14. int main()
  15. {
  16.  FILE *input, *output;
  17.  char str[100], inv[100];
  18.  int i = 0;
  19.  
  20.  if ((input=fopen("input.txt", "rt")) == NULL) {
  21.    perror("No se puede abrir el archivo de lectura\n");
  22.    return 1;
  23.  }
  24.  
  25.  if ((output=fopen("output.txt", "wt")) == NULL) {
  26.    perror("No se puede abrir el archvio de escritura\n");
  27.    return 1;
  28.  }
  29.  
  30.  while (!feof(input))
  31.    str[i++] = fgetc(input);
  32.  str[i] = '\0';
  33.  
  34.  cadenaInv(str, inv);
  35.  
  36.  i = 0;
  37.  while (inv[i++])
  38.    fputc(inv[i], output);
  39.  
  40.  fclose(input);
  41.  fclose(output);
  42. }
  43.  

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
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9.  ifstream input("input.txt", ios_base::in);
  10.  ofstream output("output.txt", ios_base::out);
  11.  string st;
  12.  
  13.  getline(input,st);
  14.  input.close();
  15.  
  16.  st = string(st.rbegin(), st.rend());
  17.  output << st;
  18.  output.close();
  19. }
  20.  

Saludos :)


Título: Re: Palindromo en un archivo
Publicado por: Eva93 en 30 Agosto 2013, 12:35 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:

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. void cadenaInv(char cad[],char cadinv[])
  5. {
  6.  int i, len = strlen(cad);
  7.  
  8.  for(i = 0; i<len; i++)
  9.    cadinv[len-i-1] = cad[i];
  10.  cadinv[len] = '\0';
  11. }
  12.  
  13.  
  14. int main()
  15. {
  16.  FILE *input, *output;
  17.  char str[100], inv[100];
  18.  int i = 0;
  19.  
  20.  if ((input=fopen("input.txt", "rt")) == NULL) {
  21.    perror("No se puede abrir el archivo de lectura\n");
  22.    return 1;
  23.  }
  24.  
  25.  if ((output=fopen("output.txt", "wt")) == NULL) {
  26.    perror("No se puede abrir el archvio de escritura\n");
  27.    return 1;
  28.  }
  29.  
  30.  while (!feof(input))
  31.    str[i++] = fgetc(input);
  32.  str[i] = '\0';
  33.  
  34.  cadenaInv(str, inv);
  35.  
  36.  i = 0;
  37.  while (inv[i++])
  38.    fputc(inv[i], output);
  39.  
  40.  fclose(input);
  41.  fclose(output);
  42. }
  43.  

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"


Título: Re: Palindromo en un archivo
Publicado por: 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!


Título: Re: Palindromo en un archivo
Publicado por: Eva93 en 30 Agosto 2013, 13:20 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.