Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/11/2012, 18:52
sonrasiel
 
Fecha de Ingreso: septiembre-2012
Mensajes: 29
Antigüedad: 11 años, 7 meses
Puntos: 0
erro en funciones para ingresar y reescribir palabras en un txt

hola quiero hacer un diccionario y mi idea es tener un archivo que guarde las palabras de este modo:
a
Primera letra del abecedario español. Vocal fuerte o abierta. Preposición.
abad
El que dirige una abadía o monasterio.
"palabra"
"significado"
.
.
etc.
Luego, lo que hago es una función que primero me pida que quiero hacer, luego me ingrese la nueva palabra o sobrescriba su significado. Pero me ha tirado una serie de errores que no se que hacer con ellos. lo estoy haciendo con tda y ficheros. creo es la forma mas fácil pero no se.

aquí esta el código sobretodo me interesan saber lo malo de las funciones
pb reescribir_significado(pb x, int n, pb* c) y
pb ingresar_palabra(pb x, pb* c, int n)
ahí es donde metí la pata. Disculparan por el código es un poco extenso.
Código C++:
Ver original
  1. #include<iostream>
  2. #include <string.h>
  3. #include <cstdlib>
  4. #include <stdio.h>
  5. using namespace std;
  6. int strcmp(const char[], const char[]);
  7.  
  8. struct palabra_p{
  9.        char* palabra;
  10.        char* significado;
  11.  
  12. };
  13.  
  14. typedef palabra_p* pb;
  15.  
  16. pb crear_palabra(){
  17.       pb x=new palabra_p;
  18.       x->palabra=new char[50];
  19.       x->significado=new char[100];
  20.       return x;
  21. }
  22. void liberar_palabra(pb x){
  23.       delete[] x->palabra;
  24.       delete[] x->significado;
  25.       delete[] x;
  26. }
  27.  
  28. pb leer_palabra(pb x){
  29.       cout<<"Digite la palabra: ";
  30.       cin.getline(x->palabra,50);
  31.           while(strlen(x->palabra)==0){
  32.                cin.getline(x->palabra,50);
  33.           }
  34.       cout<<"Digite el significado: ";
  35.       cin.getline(x->significado,100);
  36.           while(strlen(x->significado)==0){
  37.                cin.getline(x->significado,100);
  38.           }
  39.       return x;
  40. }
  41.  
  42. pb reescribir_significado(pb x, int n, pb* c){ //reescribe el significado de una palabra ya existente
  43.  
  44.  
  45. FILE *fichero;
  46. if (fichero == NULL) perror ("Error opening file");
  47.    else
  48.    {
  49.  while ( ! feof (fichero) )
  50.    fichero = fopen("palabras.txt", "r+");
  51.  while(!feof(fichero)) {
  52.   cout<<"Digite la palabra: ";
  53.       cin.getline(x->palabra,50); //ingresa palabra
  54.           while(strlen(x->palabra)==0){  //pide ingresarla en caso de no haber ingresado nada.
  55.                cin.getline(x->palabra,50);
  56.                     for(int i=0;i<n;i++){
  57.                 if(strcmp(x->palabra, c[i]) <= 0); // busca la palabra
  58.                cin.getline(x->significado,50);//ingresa el significado
  59.                //strcpy(c[i+1],x->significado);
  60.                c[i+1]=x->significado; //reescribe el significado.
  61. cout<<x->palabra<<endl<<x->significado;
  62. }}}}
  63.  
  64. pb ingresar_palabra(pb x, pb* c, int n){ //ingresa una palabra sin significado
  65.  
  66.  
  67. FILE *fichero;
  68. if (fichero == NULL) perror ("Error opening file");
  69.    else
  70.    {
  71.  while ( ! feof (fichero) )
  72.    fichero = fopen("palabras.txt", "r+");
  73.  while(!feof(fichero)) {
  74.         for(int i=0;i<n;i++){
  75.   cout<<"Digite la palabra: ";
  76.      x=leer_conjunto_palabras(pb* c, int n); //ingresa palabra
  77.           while(strlen(x->palabra)==0){  //pide ingresarla en caso de no haber ingresado nada.
  78.                cin.getline(x->palabra,50);
  79.                  for(int i=0;i<n;i++){
  80.                     if(strcmp(x->palabra, c[i]) <= 0); // busca la palabra
  81.                         cout<<"la palabra ya existe";//ingresa el significado
  82.                     else   
  83.                      //strcpy(c[i+1],x->palabra);
  84.                    
  85.                          c[i]=x->palabra; //reescribe el significado.
  86. cout<<x->palabra<<endl<<x->significado;
  87. }}}}}
  88.  
  89. void imprimir_palabra(pb x){
  90.      cout<<"\nInformacion de la palabra\n";
  91.      cout<<"-------------------------\n";
  92.      cout<<"palabra: \t"<<x->palabra;
  93.      cout<<"\nsignificado: \t\t"<<x->significado;
  94. }
  95.  
  96. void seleccionar(pb* c,int n,int x){
  97.      switch(x){
  98.          
  99.                case 1:
  100.                     cout<<"\n___________________________________\n";    
  101.                     cout<<"\nordenamiento de palabras\n";
  102.                     cout<<"___________________________________\n\n";
  103.                     c=pb ingresar_palabra(pb x, int n);
  104.                     imprimir_palabra(pb x);
  105.                break;
  106.                 case 2:
  107.                     cout<<"\n___________________________________\n";    
  108.                     cout<<"\nordenamiento de palabras\n";
  109.                     cout<<"___________________________________\n\n";
  110.                     c=pb reescribir_significado(pb x, int n);
  111.                     imprimir_palabra(pb x);
  112.                break;
  113.                                            
  114.                default:
  115.                cout<<"el numero tiene que ser 1, 2 o 3"<<endl;
  116.                    
  117.                }
  118.                  
  119.      
  120.      
  121. }
  122.  
  123. int main(){
  124. cout<<"\n\n\n\n";
  125. cout<<"que desea hacer"?
  126. cout<<" 1 ingresar nueva palabra";
  127. cout<<" 2 resscribir significado de palabra";
  128.     int n=0;
  129.     cin>>n;
  130.     pb* conjunto=new pb[n];
  131.     conjunto=seleccionar(int n);
  132.  
  133.     system("pause");
  134. }

aquí el informe de errores.
In function 'palabra_p* reescribir_significado(pb, int, palabra_p**)':
57 40 C:\Users\Fredy\Desktop\Tipos de dato abstarctos\diccionario 0.3.cpp [Error] cannot convert 'pb {aka palabra_p*}' to 'const char*' for argument '2' to 'int strcmp(const char*, const char*)'
60 17 C:\Users\Fredy\Desktop\Tipos de dato abstarctos\diccionario 0.3.cpp [Error] cannot convert 'char*' to 'pb {aka palabra_p*}' in assignment
64 40 C:\Users\Fredy\Desktop\Tipos de dato abstarctos\diccionario 0.3.cpp [Error] a function-definition is not allowed here before '{' token
134 1 C:\Users\Fredy\Desktop\Tipos de dato abstarctos\diccionario 0.3.cpp [Error] expected '}' at end of input

Última edición por sonrasiel; 30/11/2012 a las 20:42