Ir ao conteúdo
  • Cadastre-se
MatheusCBJR

C digitar uma string e mostrar na tela o número de ​vogais​ que a string possui

Recommended Posts

galera sou iniciante na área de programação, tenho um exercício no qual tenho que digitar uma string e mostrar na tela o número de vogais que a string possui, tentei fazer porém eu estou quebrando a cabeça e não consegui fazer, gostaria de ajuda para resolver, o que eu fiz até agora está embaixo:

#include <stdio.h>

int main (void) {
    
    int tamanhostring(char string[]);
    char stringdigitada[20];
    
    printf("digite uma string: ");
    scanf("%s",stringdigitada);
    
    int n = tamanhostring(stringdigitada);
    
    printf("a string %s possui  %i vogais",stringdigitada,n);
    
    return (0);
}

int tamanhostring(char string []) {
    
    char vogais [10] = "AaEeIiOu";
    int i;
    
    int  nvoagis = 0;
    
    
    for (i=0; i<10; i++)
    if (vogais == string[nvoagis] != '\0')
    ++nvogais;
}

return (nvogais);
}

 

Editado por Simon Viegas
Inserir tag CODE
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@MatheusCBJR Olá. Como se trata de uma exercício q, pelo q parece, se refere a algum curso ou faculdade, passar a resposta pronta creio q não é a melhor coisa a se fazer.

O q eu poderia dizer com respeito a seu código é q na função o uso de um só for não traria um bom resultado, então, recomendo usar dois for aninhados, onde no primeiro, você navega por todos os índices da string digitada e no segundo for (o for mais interno) você navega por todos os índices do vetor de vogais.

Dessa forma você vai poder fazer a comparação q precisa e resolve o problema.

Para percorrer todos os índices da string digitada na função seu for poderia ficar assim:

for (i = 0; i < string[i] != '\0'; i++) {

Já se você conhece a função strlen do arquivo de cabeçalho (biblioteca) <string.h> o mesmo for ficaria assim:

for (i = 0; i < strlen(string); i++) {

E aí no outro for você faz do mesmo modo para percorrer o vetor de vogais.

Seriam dois laços for aninhados

Essa seria uma das formas p resolver o exercício. Teriam outras, claro

Se deu p ajudar ok. Qualquer dúvida é só perguntar.

Editado por giu_d
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@giu_d Olá. Se está sem entender a respeito desse for q passei recomendo executar esse código:

#include <stdio.h>

int main(void) {

    char str[40];
    int i;

    printf("Digite uma string: ");
    scanf("%39[^\n]", str); // aqui estou usando uma formatação diferente apenas p ser possível fazer a leitura de string com espaços
                            // por exemplo: Essa string e para teste

    for (i = 0; str[i] != '\0'; i++)
        printf("%c\n", str[i]); // aqui estou usando o %c p imprimir cada letra da string digitada

    return 0;
}

Dessa forma você vai entender melhor a respeito do q acontece no for e ver q realmente ele navega por todos os índices da string digitada. Lembre que uma string é um vetor de caracteres, logo, assim como um vetor, ela é indexada.

Por exemplo: Se a string é "texto" o 1º índice da string (índice 0) é a letra 't', o 2º (índice 1) a letra 'e', 3º a letra 'x' e assim vai.

Como está começando a estudar programação vejo q seria interessante explicar melhor a respeito

disso, mesmo q agora você não entenda direito essa questão. Com o passar do tempo coisas assim vão ficando mais claras

Tô explicando a respeito de vetores mas nem sei se você já estudou sobre vetores ainda 

Com relação a formatação que estou usando no scanf "%39[^\n]" acima não se preocupe em entender isso agora. Pode continuar usando o '%s' que não está errado não!

Se tiver alguma dúvida fique a vontade p perguntar, ok?

Se não entendeu o q eu disse sobre dois for aninhados vou já mostrar como seriam:

for (i = 0; str[i] != '\0'; i++) {
    for (j = 0; j < vogais[j] != '\0'; j++) {
        // aqui é feita a comparação com o if
    }
}

Para quem está começando a programar agora não é um exercício tão simples assim para resolver.

Perceba que estou fazendo o uso das chaves no dois for. Isso vejo que é importante até para que você não seja induzido ao erro. Logo, recomendo fazer o uso adequado das chaves

Ta dei agora mais d uns 70% do exercício resolvido hehe

Editado por giu_d
  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

depois de muuito tempo consegui fazer, eu tinha uma lista de exercicios de string e recursividade, fiquei boa parte do dia fazendo kk

e é de um curso sim, de eletrônica

para fazer aquela questão eu abandonei a ideia de tentar fazer os programas com função, porque so me confundia, dai eu fui fazer outro exercicio que era para saber quantas palavras era, dai eu tive a ideia de fazer o seguinte programa nesse exercicio que estava em duvida: 

 

#include <stdio.h>
int main (){
char a[30];
printf("Digite uma palavra: ");
fgets(a,30,stdin);
int i;
int z=0;
for (i=0;i<=30;i++){
if (a[i]=='a'){
z=z+1;
}
if (a[i]=='e'){
z=z+1;
}
if (a[i]=='i'){
z=z+1;
}
if (a[i]=='o'){
z=z+1;
}
if (a[i]=='u'){
z=z+1;
}
}
printf("A palavra tem %i vogais",z);
return (0);
}

 

 

ai usei a variavel z como um contador de vogal, o problema é que tem que fazer letra por letra, aí tenho que botar essas letras em maiúscula tb, eu botei o tamanho do vetor como 30 porque dificilmente vai ter uma palavras com mais de 30 letras, e se tiver menos nao é problema ne

 

mas muito obrigado giu_d pela atenção que você teve para me ajudar, eu vou levar em consideração o que você disse, para fazer de uma forma mais certa kk, mas por hj chega de programação

 

 

  • Curtir 2
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@MatheusCBJR    para saber o tamanho da string você usa o comando strlen() ; assim seria melhor pois limitando o total de caracteres a 30 não significa que a string terá 30 caracteres assim haverá erro se o tamanho da string for menor que 30 , e para maiúsculas você pode usar o comando toupper() assim  :

int z=0,f;
scanf("%s",a);
b=strlen(a);
for(f=0;f<b;f++{
    if( toupper(a[f]=='A'||
        toupper(a[f]=='E'||
        toupper(a[f]=='I'||
        toupper(a[f]=='O'||
        toupper(a[f]=='U'||)
        z++;
}

 

  • Curtir 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

@MatheusCBJR Olá. Já q procurei mostrar uma maneira d resolver o exercício e como você já conseguiu resolver também, posso postar o código de uma modo q pensei em fazer o exercício

Obs: Se porventura ver o código e não entender nada do q tá acontecendo ou sendo feito no código não se preocupe, não fique desanimado, com a consciência pesada ou qualquer coisa do tipo

Pode ter certeza q se você continuar estudando como está você vai entender esse código q vou postar e códigos muito mais complexos q esse. 

O código ficaria assim:

#include <stdio.h>

int tamanho_string(char string[]); // a declaração da função também pode ser colocada aqui

int main (void) {

    char string_digitada[40], ch;
    int n, nconsoantes = 0, tamanho = 0, i;

    printf("digite uma string: ");
    scanf(" %39[^\n]", string_digitada); // não se preocupe em entender essa formatação no scanf agora

    n = tamanho_string(string_digitada);

    printf("\nA string %s possui %i vogais\n", string_digitada, n);

    return (0);
}

int tamanho_string(char string []) {

    char vogais[] = "AaEeIiOoUu";
    int i, j, nvogais;

    nvogais = 0;

    for (i = 0; i < string[i] != '\0'; i++) {
        for (j = 0; j < vogais[j] != '\0'; j++) {
            if (vogais[j] == string[i]) {
                nvogais++;
            }
        }
    }

    return nvogais;
}

Se deu para entender o código maravilha. Se não entendeu nada é como disse acima: Pode ficar bem tranquilo porque isso é mais do que normal, principalmente quando se está começando a programar

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 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

×