Ir ao conteúdo

C como fazer para fazer substituição de string


Ir à solução Resolvido por Lucca Rodrigues,

Posts recomendados

Postado

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

 

 

 

 

 

 

 

 

 

  • Solução
Postado

@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
Postado
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
Postado

@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 )

Postado

@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.

Postado

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

 

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

@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
Postado

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
Postado

@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
Postado
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

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!