Jump to content
Innight

Apagar Strings

Recommended Posts

Innight

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;

Share this post


Link to post
Share on other sites
pedrosorio

Não foste explícito, o que entendes por "apagar"?


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites
Innight

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
             }
            }
       
          }

Share this post


Link to post
Share on other sites
n3lThon

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.


dreams.each do |dream|

   dream.make_it_happen

end

Share this post


Link to post
Share on other sites
Innight

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

Share this post


Link to post
Share on other sites
pedrosorio

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.

 


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites
Innight

por acaso é MAX_CURSOS é um #define MAX_CURSOS 5

como o #define MAX_STR    100

Share this post


Link to post
Share on other sites
pedrosorio

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.


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites
Innight

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?

Share this post


Link to post
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

×
×
  • 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.