• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Innight

Apagar Strings

9 mensagens neste tópico

Boas.Gostava de saber como eu apago uma string desta estrutura:

typedef struct tagCursoFile
{
  char nome[MAX_STR+1]; 
  char descricao[MAX_STR+1];
  unsigned ciclo;
  int preenchido;
}Fcurso;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ok eu tenho aquela estrutura e tenho esta funcao.

Eu quero apagar o curso que o utilizador escolher dentro do vector.Por exemplo escolho o nome XPTO ele ja a fazer a procura e quero que ele apague esse do vector. 

void EliminarCursos()
            {
             int i,opc;
              char nome[MAX_STR];
            
              printf("Introduza o nome que procura");
              scanf("%s",&nome);
              for (i=0; i<MAX_CURSOS; i++) 
             {
             if (strcmp(nome,Cursos[i].nome)==0)       
             {
             //linhas apagar
             }
            }
       
          }

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não existe nada para apagar, tens de ser tu a colocar lá qualquer coisa e que depois entendas como vazio. Não dá para retirar uma posição no vector.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tive a pesquisar no google verifiquei que se podia fazer isto Cursos[ i ] = '\0'; mas da erro a mim depois veriquei tambem Cursos[ i ] = " ";

O unico que ainda funciona é este Cursos[ i ] =Cursos[i+5];

Mas o grande problema deste é se no Cursos[5] se existe outro curso vai copiar:S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se bem entendi, Cursos é um vector daquelas estruturas, nesse caso devias fazer

if(strcmp(nome,Cursos[i].nome)==0) 

(usa as tags code para que apareça tudo)

Depois deves querer remover a estrutura. A questão é, quando queremos ter uma lista dinâmica, geralmente usamos listas ligadas que permitem inserção e remoção de elementos muito facilmente. Num array "apagar" a estrutura corresponde a mover todas as estruturas que estão nas posições seguintes para trás, algo do estilo:

if(strcmp(nome,Cursos[i].nome)==0) {
   MAX_CURSOS--;
   for(j=i; j<MAX_CURSOS; j++)
     Cursos[j]=Cursos[j+1];
}

Claro que estou a assumir que MAX_CURSOS apesar de estar em maiúsculas não é uma constante.

 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

por acaso é MAX_CURSOS é um #define MAX_CURSOS 5

como o #define MAX_STR    100

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu percebi que era. A questão é, se tens um vector, não precisas de uma constante para saber o tamanho máximo, precisas é de uma variável que te diga quantos cursos estão guardados no vector, isto porque como já mostraste vais precisar de os adicionar e remover, ou seja, o seu número não se vai manter constante.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

exacto o pior é que o preenchido da estrutura nao funciona.por exemplo eu crio assim:

void CriaCursos()//Funcao para criar cursos
     {
     int i;
         for (i=0; i<MAX_CURSOS; i++) {
          if (Cursos[i].preenchido == 0) {    
            leString(Cursos[i].nome, "Nome do Curso: ", MAX_STR+1); 
            leString(Cursos[i].descricao, "Descricao do Curso: ", MAX_STR+1);
            Cursos[i].ciclo = leUnsigned("Ciclo do Curso: ");
            printf("--- Curso criado com sucesso ---\n");
            system("PAUSE");
            system("CLS");
            Cursos[i].preenchido++;
            break;
                 }
                  }
     
      if (i==MAX_CURSOS) 
          printf("Excedeu o tamanho do vector\n");
          }

Mas o meu preenchido nao passa de 1,embora possa ter 3 cursos inseridos:S. Eu tambem só o tenho declarado na estretura em mais lado nenhum. Por exemplo no eliminar deve ser o preenchido-- em vez de MAX_CURSOS certo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora