RBCOL
(usa Outra)
Enviado em 24/05/2015 - 19:38h
amigo estou montado outro lista encadeada, na ora de imprimir com a chamada seleciona só imprime a ultima frase de string digitada se vc puder me ajudar a encontrar o erro eu agradeço.
a frase a ser digitada é esta: INSERE ('Nota da Prova de BD-I', 'Tirei nota 10')
codigo:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
#include <string>
using namespace std;
int cont = 1;
struct lista {
struct lista *prox;
string *texto;
string *titulo;
int codigo;
};
typedef struct lista Lista;
Lista* inicializa() {
return NULL;
}
Lista* insere (Lista *p, string *titulo1, string *texto1 ) {
Lista* novo = (Lista*)malloc(sizeof(Lista));
novo->texto = texto1;
novo->titulo = titulo1;
novo->prox = p;
cont++;
return (novo);
}
void imprime(Lista *p) {
Lista *l;
if(p == NULL) {
cout << " Lista vazia\n";
return ;
}
for(l = p; l != NULL; l = l->prox)
cout << " \nCodigo: " << l->codigo << " \ntitulo: " << *l->titulo << " \nTexto: " << *l->texto << "\n\n";
}
bool vazia (Lista* l) {
return(l == NULL);
}
Lista* altera (Lista *p, int v, string *titulo2, string *texto2) {
Lista *l = p;
while(l != NULL && l->codigo != v) {
l = l->prox;
}
if(l == NULL) {
cout << " Comando nao encontrado";
return (l);
}
l->titulo = titulo2;
l->texto = texto2;
return (l);
}
Lista* exclui (Lista *p, int v) {
Lista *ant = NULL;
Lista *l = p;
while(l != NULL && l->codigo != v) {
ant = l;
l = l->prox;
}
if(l == NULL)
cout << " Nao encontrado";
return p;
if(ant == NULL) {
p = l->prox;
} else {
ant->prox = l->prox;
}
free(l);
return p;
}
int main() {
Lista* lista = inicializa();
string comando;
string cmd;
string aux;
string aux2;
cout << "\n\t\t ANOTAI\n\n\n";
do{
//cout << "\n 1 - INSERE \n 2 - ATUALIZA \n 3 - DELETA \n 4 - SELECIONA \n 0 - SAIR\n\n";
cout << "\n Linha de comando: ";
getline(cin, comando);
int i = 0;
while(comando[i] != '\0' && comando[i] != '('){
cmd = comando.substr(0,6);
i++;
}
if ( cmd == "INSERE") {
while(comando[i] != '\''){
i++;
}
aux = comando.substr(i+1);
int f = 0;
while(aux[f] != '\''){
f++;
}
aux = aux.substr(0,f);
while(comando[i] != ','){
i++;
}
while(comando[i] != '\''){
i++;
}
aux2 = comando.substr(i+1);
int c = 0;
while(aux2[c] != '\''){
c++;
}
aux2 = aux2.substr(0,c);
cout << aux << "\n" << aux2 << "\n";
lista = insere(lista, &aux, &aux2);
} else if(comando.substr(0,8) == "ATUALIZA") {
//lista = altera(lista);
} else if (cmd.substr(0,6) == "DELETA") {
char op1[5];
int inc = 0;
string a = cmd.substr(7);
while(a[inc] != '\0'){
op1[inc] = a[inc];
inc++;
}
int valordeleta = atoi(op1);
lista = exclui(lista, valordeleta);
} else if (comando.substr(0,9) == "SELECIONA") {
imprime(lista);
} else{
cout << " Comando invalido!\n\n";
}
}
while (cmd != "SAIR");
system ("PAUSE");
return(0);
}