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#include<iostream>
#include <string.h>
#include <cstdlib>
#include <stdio.h>
using namespace std;
int strcmp(const char[], const char[]);
struct palabra_p{
char* palabra;
char* significado;
};
typedef palabra_p* pb;
pb crear_palabra(){
pb x=new palabra_p;
x->palabra=new char[50];
x->significado=new char[100];
return x;
}
void liberar_palabra(pb x){
delete[] x->palabra;
delete[] x->significado;
delete[] x;
}
pb leer_palabra(pb x){
cout<<"Digite la palabra: ";
cin.getline(x->palabra,50);
cin.getline(x->palabra,50);
}
cout<<"Digite el significado: ";
cin.getline(x->significado,100);
while(strlen(x
->significado
)==0){ cin.getline(x->significado,100);
}
return x;
}
pb reescribir_significado(pb x, int n, pb* c){ //reescribe el significado de una palabra ya existente
FILE *fichero;
if (fichero
== NULL
) perror ("Error opening file"); else
{
while ( ! feof (fichero
) ) fichero
= fopen("palabras.txt", "r+"); cout<<"Digite la palabra: ";
cin.getline(x->palabra,50); //ingresa palabra
while(strlen(x
->palabra
)==0){ //pide ingresarla en caso de no haber ingresado nada. cin.getline(x->palabra,50);
for(int i=0;i<n;i++){
if(strcmp(x
->palabra
, c
[i
]) <= 0); // busca la palabra cin.getline(x->significado,50);//ingresa el significado
//strcpy(c[i+1],x->significado);
c[i+1]=x->significado; //reescribe el significado.
cout<<x->palabra<<endl<<x->significado;
}}}}
pb ingresar_palabra(pb x, pb* c, int n){ //ingresa una palabra sin significado
FILE *fichero;
if (fichero
== NULL
) perror ("Error opening file"); else
{
while ( ! feof (fichero
) ) fichero
= fopen("palabras.txt", "r+"); for(int i=0;i<n;i++){
cout<<"Digite la palabra: ";
x=leer_conjunto_palabras(pb* c, int n); //ingresa palabra
while(strlen(x
->palabra
)==0){ //pide ingresarla en caso de no haber ingresado nada. cin.getline(x->palabra,50);
for(int i=0;i<n;i++){
if(strcmp(x
->palabra
, c
[i
]) <= 0); // busca la palabra cout<<"la palabra ya existe";//ingresa el significado
else
//strcpy(c[i+1],x->palabra);
c[i]=x->palabra; //reescribe el significado.
cout<<x->palabra<<endl<<x->significado;
}}}}}
void imprimir_palabra(pb x){
cout<<"\nInformacion de la palabra\n";
cout<<"-------------------------\n";
cout<<"palabra: \t"<<x->palabra;
cout<<"\nsignificado: \t\t"<<x->significado;
}
void seleccionar(pb* c,int n,int x){
switch(x){
case 1:
cout<<"\n___________________________________\n";
cout<<"\nordenamiento de palabras\n";
cout<<"___________________________________\n\n";
c=pb ingresar_palabra(pb x, int n);
imprimir_palabra(pb x);
break;
case 2:
cout<<"\n___________________________________\n";
cout<<"\nordenamiento de palabras\n";
cout<<"___________________________________\n\n";
c=pb reescribir_significado(pb x, int n);
imprimir_palabra(pb x);
break;
default:
cout<<"el numero tiene que ser 1, 2 o 3"<<endl;
}
}
int main(){
cout<<"\n\n\n\n";
cout<<"que desea hacer"?
cout<<" 1 ingresar nueva palabra";
cout<<" 2 resscribir significado de palabra";
int n=0;
cin>>n;
pb* conjunto=new pb[n];
conjunto=seleccionar(int n);
}
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