Ir ao conteúdo
  • Cadastre-se

C como fazer para fazer substituição de string


Ir à solução Resolvido por Lucca Rodrigues,

Posts recomendados

Senhores , Bom Dia

 

Gostaria de saber como eu consigo fazer para em C , quando eu digitar um código de algum produto o sistema le outro ? isso é para substituir produtos de fornecedores diferentes.

 

A ideia seria , o usuario digitar um código Exemplo - SU056 e o programa le VT859... serão vários produtos..

 

 #include <stdio.h>
    #include <string.h> 
    #include <math.h>
    
    


    int main ()
    {
        

      char COD;
      
      
      printf ( "digite o código do perfil: \n");
      scanf ( "%s" , &COD);  

      
      if (COD == SU001)
      printf("CODIGO = vt001");
      
      
      else 
      if (COD == su056)
      printf("CODIGO = vt859");
      
      else
      printf("CODIGO = %s \n", COD);
        
                   
        return 0;
    }

 

 

 

 

 

 

 

 

 

Link para o comentário
Compartilhar em outros sites

  • felipenoronha alterou o título para como fazer para fazer substituição de string
  • Solução

@felipenoronha `COD´ deveria ser uma string, e se o tal código tem só 5 caracteres, declare uma string com espaço para 6, já que deve deixar espaço para o terminador: caractere nulo ou '\0'.

char COD[6];

E não precisa de & na scanf() para ler e gravar a partir do elemento de índice 0 da string, os caracteres serão lidos e gravados partindo da posição 0 da string sem o &, mas se quiser pode fazer assim também:

scanf ("%5s", &COD[0]);  

Dá no mesmo.

O 5 que coloquei depois do % é para limitar a quantidade de caracteres lidos e gravados na string para 5.

Agora, se quer comparar strings, use strcmp(). Vejo que já incluiu string.h mas não usou a função, veja:

if (strcmp(COD, "SU001") == 0)
    printf("CODIGO = vt001");

SU001 é uma string, e deve estar entre aspas.

Caso strcmp() retorne 0 as strings são idênticas, e é isto que está sendo verificado.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

4 horas atrás, felipenoronha disse:

A ideia seria , o usuario digitar um código Exemplo - SU056 e o programa le VT859... serão vários produtos

 

Use uma tabela de referência e troque depois de ler.

 

Uma maneira comum é converter o código lido para uma chave e ter uma matriz de equivalência onde tem o código original e as possíveis alternativas. Um exemplo é no caso de peças que tem equivalentes, ou medicamentos com o mesmo principio ativo. Por exemplo no caso de medicamentos você entra com o medicamento e ele vai para a tabela pelo princípio ativo. E aí para cada medicamento tem a primeira opção e uma eventual lista de alternativas, com zero marcando o final.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@arfneto  

 

Bom Dia , referente a essa tabela de referência , você tem um modelo que possa me enviar ? ... pois além dos itens que vou substituir... pensei em uma tabela com todos os produtos que são portfólio... para quando o usuário digitar um que não seja , ele recebe a mensagem ( Item fora de portfólio )

Link para o comentário
Compartilhar em outros sites

@felipenoronha Algo comum seria ao inserir o produto permitir a entrada de códigos de produtos alternativos. E ter essas funções no sistema, claro, coisas como cadastrar alternativa a um produto.

 

E na hora de carregar o sistema montar simples listas circulares com os produtos compatíveis. Um vetor de duas colunas por exemplo, onde a primeira é a posição do registro do produto e a seguinte é a posição do próximo compatível.

Link para o comentário
Compartilhar em outros sites

@Lucca Rodrigues , o sistema ja esta quase pronto com sua ajuda.. muito obrigado... 

 

Serão mais de 400 itens , então estou colocando alguns abaixo como exemplo... A parte de substituir deu certo , e consigo também marcar como fora de portfolio os item a item... porém gostaria então de criar um vetor com itens de portfolio e se o usuario digitar qualquer coisa fora , vem a mensagem fora de portfolio..

 

Conforme abaixo , o primeiro item da certo , SU001 , os demais não percorre , tenho que usar o FOR ali ?

 

 

    #include <stdio.h>
    #include <string.h> 
    #include <math.h>
    
         
    int main ()
    {
        
     
    
      char COD[10];
      char CATALOGO[4][10] =  {"SU001", "SU002", "SU003", "US001"};
      int i;
      

                
      printf ( "digite o codigo do perfil: \n");
      scanf ( "%s" , &COD);

     
                       
      if (strcmp(COD,CATALOGO) ==0)
       printf("CODIGO = %s \n\n", COD);

      else
      if (strcmp(COD, "FA200") == 0)
         printf("CODIGO = PS306 \n\n");
         
      
      else 
      if (strcmp(COD, "US294") == 0)
         printf("CODIGO = US050 \n\n");

      else 
      if (strcmp(COD, "VZ006") == 0)
         printf("CODIGO = VZ001 \n\n");

      else 
      if (strcmp(COD, "US285") == 0)
         printf("CODIGO = US001 \n\n");

      else 
      if (strcmp(COD, "SU040") == 0)
         printf("CODIGO = VT800 , Lembrar de Trocar a Guia \n\n");

      else 
      if (strcmp(COD, "SU041") == 0)
         printf("CODIGO = VT799 , Lembrar de Trocar a Guia \n\n");

      else 
      if (strcmp(COD, "SU047") == 0)
         printf("CODIGO = VT798 , Lembrar de Trocar a Guia e Tampa do Montante \n\n");

      else 
      if (strcmp(COD, "SU049") == 0)
         printf("CODIGO = VT797 , Lembrar de Trocar a Guia e Tampa do Montante \n\n");

      else 
      if (strcmp(COD, "SU056") == 0)
         printf("CODIGO = VT859 , Lembrar de Trocar a Guia \n\n");

      else 
      if (strcmp(COD, "VT056") == 0)
         printf("CODIGO = VT859 , Lembrar de Trocar a Guia \n\n");

      else 
      if (strcmp(COD, "SU061") == 0)
         printf("CODIGO = VT861 , Lembrar de Trocar a Guia e Tampa do Montante \n\n");

      else
      printf("CODIGO FORA DE PORTFOLIO \n");   

                
        
              
        return 0;
    }

 

Link para o comentário
Compartilhar em outros sites

13 minutos atrás, felipenoronha disse:

Serão mais de 400 itens , então estou colocando alguns abaixo como exemplo... A parte de substituir deu certo , e consigo também marcar como fora de portfolio os item a item... porém gostaria então de criar um vetor com itens de portfolio e se o usuario digitar qualquer coisa fora , vem a mensagem fora de portfolio..

 

Faça como eu disse, use uma lista circular para cada produto e seus compatíveis, por exemplo. Não seria nada original, porque é o comum fazer isso

ou era nos anos '90 :) já que de lá para cá o padrão é outro: isso fica no banco de dados, mesmo quando se programa em C

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@felipenoronha

41 minutos atrás, felipenoronha disse:

char CATALOGO[4][10] =  {"SU001", "SU002", "SU003", "US001"};

Se cada código tem só 5 caracteres, então declare:

char CATALOGO[4][6] =  {"SU001", "SU002", "SU003", "US001"};

Se são 400 itens como você disse, não há razão em deixar espaço para mais 4 caracteres, use só o necessário.

 

41 minutos atrás, felipenoronha disse:

if (strcmp(COD,CATALOGO) ==0)
    printf("CODIGO = %s \n\n", COD);

`CATALOGO´ é um vetor de strings, portanto você deve indexar essa variável. Ex:

if (strcmp(COD, CATALOGO[0]) == 0)
    printf("CODIGO = %s \n\n", COD);

Assim você compara `COD´ com "SU001", que está na posição 0 do vetor `CATALOGO´.

41 minutos atrás, felipenoronha disse:

tenho que usar o FOR ali ?

Você pode usar.

Só estou lhe dando uma ajuda com relação à esta forma em que pretende escrever o código, mas você pode tentar seguir a ideia de @arfneto de fazer uma lista.

De qualquer forma, a ideia seria incrementar o valor de um índice, veja:

char busca[6] = "COD03";
char catalogo[3][6] =  {"COD01", "COD02", "COD03"};
char codigo[3][6] = {"DOC01", "DOC02", "DOC03"};
int i;

for(i = 0; i < 3; i++)
    if(strcmp(busca, catalogo[i]) ==0) break;

Caso a string `busca´ corresponda à alguma string do vetor `catalogo´, o controle é transferido para fora do loop por meio de break. Assim, podemos avaliar o valor do índice:

if(i < 3)
    printf("\nCodigo = %s\n\n", codigo[i]);
else
    printf("\nItem nao encontrado\n\n");

Se i < 3, a string foi encontrada, tendo em vista que o valor do índice não foi incrementado até atingir valor 3.

Caso contrário, a string não foi encontrada, o controle foi transferido para fora do loop pois o índice atingiu valor 3 e a condição do loop se tornou falsa.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Escreva em torno dos dados

 

Provavelmente algo assim funcionaria sem muito esforço:

 


typedef struct
{
    int     id;

    char*   cod;
    int     estoque;
    char*   nome;
    float   valor_un; // custo unitario

}   Produto;


typedef struct
{
    int     p;  // o produto
    int     prox; // prox compativel

}   Ref;    // referencia


typedef struct
{
    unsigned    N;
    Ref*        V; // o cadastro

}   Cadastro;

 

Assim mantem a independência do que quer que queira colocar em Produto
 

typedef struct
{
    int     id;

    char*   cod;
    int     estoque;
    char*   nome;
    float   valor_un; // custo unitario

}   Produto;

 

Porque o link é só uma referência
 

typedef struct
{
    int     p;  // o produto
    int     prox; // prox compativel

}   Ref;    // referencia

 

Para um simples vetor
 

typedef struct
{
    unsigned    N;
    Ref*        V; // o cadastro

}   Cadastro;

 

E pode criar com 400 ou 400.000 ou ir alocando em blocos conforme o cadastro cresce. Ao final salva em disco, no início carrega do disco e constrói o vetor.

 

E se preferir usar fixos 400 E não alocar memória algo assim deve servir:
 

int main(void)
{
    Ref         cad[400];
    Cadastro    teste = { 0, (Ref*) &cad };

    return 0;
}

 

Usando códigos int pode ver um exempo:

 

codigo		alternativas
 3              6,9,12
 2              4,8
15              82, 28
5               *
66              *
77              *

 

e, claro, usaria um índice inválido para sinalizar que não tem mais alternativa, como -1, o simples.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Lucca Rodrigues @arfneto

 

As dicas que tem me dado , estão me ajudando muito... Muito obrigado

 

Decidi entrar na faculdade depois dos 33.... e mes passado , então acho que no inicio é assim mesmo né... 

 

Estou tentando trazer as coisas da Faculdade para meu dia a dia e esse sistema ja vai me auxiliar demais.. 
Muito Obrigado

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

2 minutos atrás, felipenoronha disse:

Decidi entrar na faculdade depois dos 33.... e mes passado , então acho que no inicio é assim mesmo né... 

 

Acho que se tivesse 8 seria igualzinho :) 

Vai depender de paciência e bom material. Livros, instrutores, exercícios e mesmo forums como esse aqui.
 

3 minutos atrás, felipenoronha disse:

Estou tentando trazer as coisas da Faculdade para meu dia a dia e esse sistema ja vai me auxiliar demais

 

Sábia decisão. É o melhor caminho pra aprender: resolver algo sério. Mas comece devagar. Um programa de produção precisa ser muito mais sólido e no começo pode ser difícil chegar a um programa que não fecha na sua cara de vez em quando, por exemplo. E tem aquelas intermináveis condições de erro que um programa de iniciante não prevê :) 

 

Entendeu como montar o vetor de exemplo que te mostrei? Com esse método pode alterar o Produto sem mexer no código das funções. E o código sem mexer no produto. É o que se usa em produção.

 

E no início lê do disco a situação do cadastro. Que vai estar vazio da primeira vez, claro.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Redes-Wi-Fi-capa-3d-newsletter.png

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!