Jump to content

Criar Função que insere um elemento numa posicao de um vector


diogoazevedo
 Share

Recommended Posts

Boa tarde,

Estou a fazer um trabalho para uma cadeira de programação e tenho uma dificuldade num exercício. Resolvi pedir a vossa ajuda.

A estrutura de dados vetor é a base da biblioteca e tem a seguinte declaração:

typedef struct {
int tamanho;
char** elementos;
} vetor;

int vetor_insere (vetor *vec, const char *valor, int pos)

insere um elemento na posição especificada

Parâmetros:

vec        apontador para vetor

valor      string a inserir

pos        índice do elemento onde se pretende inserir a string

se pos=-1 insere no fim do vetor

Retorna:

-1 se ocorrer algum erro (p.ex. se valor pos indicar uma posição inválida) ou pos se bem sucedido

Esse é o enunciado dado. Tenho que escrever a função vetor_insere.

O que fiz foi isto:

int vetor_insere(vetor* vec, const char* valor, int pos)
{
int i;
if(pos>=(*vec).tamanho || pos<-1)
    return -1;
else if(pos==-1)
{
	 (*vec).elementos=(char**)realloc((*vec).elementos,sizeof(char*)*((*vec).tamanho+1));
	 strcpy((*vec).elementos[((*vec).tamanho)+1],valor);
	 return pos;
}
else
{

	 (*vec).elementos=(char**)realloc((*vec).elementos,sizeof(char*)*(*vec).tamanho+1);
	 i=(*vec).tamanho;
	 while(i>pos)
	 {
		 (*vec).elementos[i]=(*vec).elementos[i-1];
	     i--;
	 }
return pos;
}
}

mas quando compilo diz que o tamanho do vetor deveria ser 3 depois de inserir string. Não percebo o que estou a fazer de errado. Agradecia imenso a vossa ajuda,

Obrigado!

Link to comment
Share on other sites

mas quando compilo diz que o tamanho do vetor deveria ser 3 depois de inserir string

não percebi o que queres dizer com isso ...

segundo:

estas a reallocar memória para o mais um elemento do "vector" (isto é mais um ponteiro char *) mas não estás a allocar espaço para a string em si

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.