Ir ao conteúdo
  • Cadastre-se

C Como procurar e achar uma letra específica dentro de uma palavra em char?


Posts recomendados

Boa tarde! Eu não estou conseguindo fazer um código C em que o usuário digita uma palavra até 6 posições ou menos e o programa vai achar se a palavra tem a letra 'c'. Em seguida, ele mostra que achou a letra c e diz em quais posições do array ele achou. Grato desde já. 
PS: Sou iniciante.

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>


void achar_c(char nome[5]){
    char aux;
    int i;
    int posi;


    for(i = 0 ; i < 5 ; i++){

             while(nome[i] == 'c'){
             aux = nome[i];
             posi = i;
             i++;
            }
        }
        printf("A letra %c é achada nas posições %d ", aux, posi);


}

int main(){
    setlocale(LC_ALL,"Portuguese");

    char nome[5];
    printf ("digite um nome: ");
    fgets(nome, 5, stdin);

    achar_c(nome);

        return 0;

}

 

Link para o comentário
Compartilhar em outros sites

Eu dei uma "consertada" no seu programa, de uma olhada nos comentários para entender o que está acontecendo.

Spoiler

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>


void achar_c(char *frase)
{
    int contador;
    int quantidade = 0;

    /* Faz o loop for enquanto frase for diferente de 0 */
    for(contador = 0 ;  frase[contador]; contador++) {
        /* Testa se há uma letra C nessa na posição atual */
        if (frase[contador] == 'c' || frase[contador] == 'C') {
            /* Mostra a posição da letra C */
            printf("A letra C foi encontrada na posicao %i\n", contador);
            quantidade++;   /* Conta quantos C tem na frase */
        }
    }

    /* Mostra a quantidade de C da frase */
    if (quantidade)
        printf("A quantidade de letras C na frase e %i\n", quantidade);
    else 
        printf("Nao ha letras C na frase\n");
}

int main(void)
{
    /* Você precisa de 7 espaços para pegar 6 caracteres */
    char nome[7];
    /* Define a localização do programa */
    setlocale(LC_ALL,"Portuguese");
    /* Pega uma string do usuario */
    printf ("digite um nome: ");
    fgets(nome, 7, stdin);

    achar_c(nome);

    getchar();      /* Pausa o programa */

    return 0;

}

 

 

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

Seu programa está bem construído, mas um pouco frágil. Considere que em C fgets() vai retornar uma string, algo que tem um 0 no fim por definição.

 

E então é mais simples você usar isso na função e não o tamanho.

 

Entenda que se espera que o usuário possa digitar 6 letras você deveria ter 7 no vetor, porque fgets() vai garantir um zero no final.
 

void achar_c(char nome[5]);

 

podia ser só
 

    int achar_c(char nome[]);

 

e seria natural retornar o número de vezes em que achou 'c'.

 

Como reportar as letras?

 

São duas maneiras simples: uma é ir mostrando assim que achar cada letra e mostrar a mensagem de acordo. Outra é ter um vetor de igual tamanho onde marca one está cada 'c'. 

 

Isso porque o enunciado diz que deve mostrar antes que encontrou a letra, mas nào deixa claro que você tenha que dizer QUANTAS foram encontradas, e assim pode dizer que achou ao encontrar a primeira e a partir daí ir mostrando as outras. 

 

Não fosse essa brecha dada pela redação
 

21 minutos atrás, Ricardo_Nascimento disse:

Em seguida, ele mostra que achou a letra c e diz em quais posições do array ele achou

 

seria preciso claro usar um vetor e esperar pra ver quantas letras eram. Ou, claro, ler o vetor duas vezes, já que ele não vai sumir...

 

Deixe main() sempre como a primeira função de seu programa....

 

for(i = 0 ; i < 5 ; i++){

             while(nome[i] == 'c'){
             aux = nome[i];
             posi = i;
             i++;
            }
        }
        printf("A letra %c é achada nas posições %d ", aux, posi);

 

 

Dentro desse loop ao encontrar um  'c' se for o primeiro você escreve que encontrou algum e começa a listar as posições. O vetor pode ser todo de 'c' afinal.

 

E ao final do loop se não achou nenhum você diz que não tinha. Nada mais.

 

Note que como eu disse você estaria melhor servido usando um while() até ter um zero na entrada porque aí não precisaria usar um valor fixo, como o 5, em lugar nenhum...

 

 

 

  • Curtir 2
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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!