Genesis 0 Denunciar post Postado Setembro 13, 2008 e ae galera... to fazendo um programa que é tipo uma lista... cadastra nomes, lista os nomes cadastrados e DELETA NOMES nessa parte que ta f%$# eu quero saber se tem alguma função ou algum jeito de eliminar um elemento de um array pq eu tenho no menu uma opção de deletar nomes cadastrados... mas quando eu deleto um nome e em seguida listo os cadastros, o nome deletado conta como um espaço em branco... dai fica tipo 1- Bruno 2 - (nome deletado 3 - Sarah isso pq o programa deleta o cadastro baseado no nome... alguem ajuda? :\ Compartilhar este post Link para o post Compartilhar em outros sites
Genesis 0 Denunciar post Postado Setembro 13, 2008 aqui vai o código: #include <iostream> #include <windows.h> #include <string.h> //prototipos void fnctMaxSize(); void fnctPesquisar(); void fnctCadastrar(char *nome); void listarContatos(); void delContato(); void delLista(); void printMenu(); //-------------------------------- using namespace std; typedef struct { char nomeContato[20]; } addrStruct; const int MAX = 10; addrStruct lista[MAX]; int contatosListados = 0; void fnctMaxSize() { cout << "O numero maximo de contatos que podem ser cadastrados eh: "; printf("%d\n", MAX); cout << "O numero de contatos cadastrados ate o momento eh de: ";printf("%d contato(s)\n",contatosListados); } void fnctPesquisar() { char s[20]; if(contatosListados > 0) { cout << "Digite o nome do contato: "; cin >> s; for(int i = 0; i <= contatosListados; i++) { if(strcmp(s,lista[i].nomeContato) == 0) { cout << "\nContato encontrado!" << endl; } else { cout << "\nContato nao encontrado na lista." << endl; } } } else { cout << "Nao ha contatos cadastrados na lista." << endl; } } void fnctCadastrar() { if(contatosListados < 10) { int i = contatosListados; cout << "Digite o nome a ser cadastrado: " << endl; cin >> lista[i].nomeContato; contatosListados++; } else { cout << "Nao eh possivel cadastrar mais contatos. A lista esta cheia." << endl; } } void listarContatos() { if(contatosListados > 0 && contatosListados <= 10) { for(int i = 0; i < contatosListados; i++) { printf("\n %d - %s",i+1,lista[i].nomeContato); } } system("pause >nul"); system("cls"); } void delContato() { char contato[20]; int match = 0; if(contatosListados > 0) { cout << "\nDigite o nome do contato a ser deletado: " << endl; cin >> contato; for(int i = 0; i <= contatosListados; i++) { if(strcmp(contato,lista[i].nomeContato) == 0) { [color="#FF0000"]É nessa parte que eu tenho que botar o código que elimina do array o elemento cujo nome é igual...[/color] match++; //isso serve para checar se o nome digitado está ou não na lista } } if(match == 0) { cout << "O nome digitado nao esta cadastrado."; system("pause >nul"); } } else { cout << "nao ha contatos cadastrados na lista." << endl; system("pause >nul"); } } void printMenu() { system("@echo off"); system("cls"); cout << "Digite o numero da opcao escolida e aperte a tecla ENTER\n" << endl; cout << "1 - Listar contatos cadastrados na lista." << endl; cout << "2 - Cadastrar novo contato." << endl; cout << "3 - Deletar um contato especificando-o pelo nome" << endl; cout << "4 - Deletar a lista por completo" << endl; cout << "\n5 - Sair" << endl; } main() { int menuChoise,done = 0; while(!done) { printMenu(); cin >> menuChoise; switch(menuChoise) { case 1: fnctMaxSize(); listarContatos(); break; case 2: fnctCadastrar(); break; case 3: delContato(); break; case 4:; break; case 5: done = 1; break; default: cout << "Opcao invalida." << endl; } } } Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Setembro 13, 2008 e c na hr de deletar você num faz tipo uma fila, faz deslocamento.. []'s ---Título Editado--- [ajuda] Apagando elemento de um array http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Apagando elemento de um array Compartilhar este post Link para o post Compartilhar em outros sites
José Enésio 4 Denunciar post Postado Setembro 15, 2008 Ou você pode fazer aquela lista ligada ou seilá como é o nome me esqueci agora :P de structs que fica mais fácil deletar e não perder o jeito, é só apontar o ponteiro do elemento anterior pro próximo elemento. Acho que é lista encadeada que eu quis dizer? Oo Mas se tem que fazer com vetor mesmo, pode tentar fazer uma função diferente que primeiro encontra o elemento a ser deletado, aí faz um for com os próximos elementos, mandando eles pro "espaço anterior", ou seja, o deleto o elemento 2, o elemento 3 vem no lugar do 2, o 4 no lugar do 3, etc... como o quizatiman ali disse :) Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Setembro 15, 2008 é e a função de deslocar é simples simples: exemplo: int deslocaEsq(int iIndice, int iQtdPecas){ for(int i = iIndice; i < iQtdPecas; i++) iPeca1[i] = iPeca1[i+1]; iQtdPecas--; return iQtdPecas; } retirei de um codigo mew, + é pra você ter uma noçaum soh. []'s Compartilhar este post Link para o post Compartilhar em outros sites