Ir ao conteúdo
  • Cadastre-se
Victorbg

RESOLVIDO (Duvida) Mudanças de ocorrência em string

Recommended Posts

Boa noite amigos!

gostaria de tirar uma duvida aqui, estou fazendo esse exercício conforme o enunciado:

 

- Escreva uma função que receba um ponteiro para uma string e 2 caracteres. Troque todas as ocorrências do primeiro caractere ( c) pelo segundo caractere informado (x). Retorne o número de trocas efetuadas.

A função deve ter o seguinte protótipo:

int replace(char *s, char c, char x)

 

Ex : arara à trocar todas as ocorrências de ‘r’ por ‘x’

     resultado à axaxa

 

OBS: Não use nenhuma função da biblioteca string nesse exercicio

 

Conforme o enunciado usei essa lógica:

 
#include<stdio.h>#include<stdlib.h>int replace(char *s, char c, char x){     char *p;     char aux;     int cont;     for(p=s;*p!='\0';p++)        if(*p==c)        aux=c;        *p=x;        //troca++;        return *p;           }  main(){    char str[20];    char d,y;    printf("Digite a string desejada:\n");    gets(str);    printf("Digite o caractere a ser trocado da string:\n");  scanf("%c",&d);    printf("Digite o novo caractere para substituir o primeiro:\n");  scanf("%c",&y);    printf("\n");    //replace(str,d,y);    printf("Nova string: %s\nPrimeiro Caractere: %c\nSegundo Caractere: %c\n",str,d,y);    system("PAUSE");    return 0;}  
Ele pede todos os valores, string desejada e o caractere a ser trocado mas dai quando chega no próximo print ele já pula para a exibição dos três valores (ultimo printf), exibe a string digitada, o caractere digitado no segundo printf mas não dá tempo de digitar o ultimo. Gostaria de saber que devo fazer e se a lógica usada na função para trocar as palavras estaria correta assim. Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Basta colocar um comando pra limpar buffer do teclado
após cada scanf(); pra que ele não pule mais.
se tiver usando o windows use:

 fflush(stdin);
Tem um erro simples,na função replace
faltou abrir e fechar
chaves, no if para que o bloco seja todo lido.
veja o correto:

 if(*p==c){        aux=c;        *p=x;        }

Com estas alterações, deve funcionar tudo perfeitamente.
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

A linha de onde você chama a função no main está comentada. Descomentea para que a função tenha efeito. A dica dada pelo Main.cpp funciona perfeitamente. Qaunto a quantidade de trocas feitas, sua função deve retornar um inteiro e não um ponteiro de char. Faça a variável cont contar a quantidade de elementos trocados e retorne esse valor da função. Se ainda persistirem as dúvidas, volte a postar que tentarei lhe ajudar até mais e bons estudos.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, mudei conforme as orientações do Main.cpp, atribui mais uma variável para retornar o valor da contagem de trocas e ficou assim:

#include<stdio.h>#include<stdlib.h>int replace(char *s, char c, char x){     char *p;     char aux;     int cont,valor;     for(p=s;*p!='\0';p++)     {          if(*p==c){        aux=c;        *p=x;        return *p;        }     cont++;     return valor;       }  }  int main(){    char str[20];    char d,y;    printf("Digite a string desejada:\n");    gets(str);    fflush(stdin);    printf("Digite o primeiro caractere:\n");      scanf("%s",d);    fflush(stdin);    printf("Digite o segundo caractere :\n");     scanf("%s",y);    fflush(stdin);    printf("\n");    replace(str,d,y);    printf("Nova string: %s\nPrimeiro Caractere: %s\nSegundo Caractere: %s\n",str,d,y);    system("PAUSE");    return 0;}    

 

 

exemplo de execução:

Digite a string desejada:

mississipi

Digite o primeiro caractere:

s

após o enter, não aparece a solicitação de dígito do segundo caractere e o programa dá uma mensagem critica de erro: "Exercicio2 parou de funcionar"... e na hora que vou escrever a função coloquei o *p como retorno para ele retornar o valor da string modificada na função, mas estou em dúvida como retorno a string modificada (se é assim mesmo) e a quantidade de trocas, tenho que fazer 2 return?... queria saber que tem ai de errado no código, e a minha lógica do exercicio falta alguma coisa?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×