Ir ao conteúdo

Posts recomendados

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

int conta_consoantes(char string[])
{
	int i = 0;
	int vogais = 0;
	while (string[i] != '\0'){
	if (string[i] == 'a' || string[i] == 'A'){
	vogais--;
	}
	if (string[i] == 'e' || string[i] == 'E'){
	vogais--;
	}
	if (string[i] == 'i' || string[i] == 'I'){
	vogais--;
	}
	if (string[i] == 'o' || string[i] == 'O'){
	vogais--;
	}
	if (string[i] == 'u' || string[i] == 'U'){
	vogais--;
	}
	i--;
	}
	return vogais;
}

int main(void)
{
	char uma_string[30] //cria a variável string
	printf("Informe uma palavra ou frase que deseja saber quantas consantes tem: \n"); //recebe a palavra ou frase
	scanf("%c", &uma_string); //armazena a pavra ou frase na variável uma_string
	int vogais = conta_consoantes(uma_string);
	printf("consoantes: %d \n", vogais);
	system("pause");
}

Boa Noite! Preciso criar uma função que conta quantas consoantes há em uma string, criando uma implementação para a função main na qual a sua função é testada e imprima na tela a quantidade de consoantes. Já fiz inúmeras tentativas e não saio do lugar, a última tentativa parei no código acima, algum colega poderia ajudar-me!?

Postado

||@jpaulofsa

int i = 0;
while (string[i] != '\0'){ ... i--; }

 

Define-se i contendo 0, depois a cada fim do laço do bloco WHILE se decremente 1. É um erro de conceito, pois todo vetor inicia no 0, inclusive a constante de nome string contem o primeiro local na memória do vetor. Se decrementarmos a partir do 0 iremos acessar os locais que estão aquém do valor inicial, ou seja, 'andasse' para trás em locais desconhecidos. Enfim o correto é i++, ou i += 1 ou ainda i =  1 + i; Para assim 'andarmos' para frente sobre locais conhecidos de memoria reservada.

 

Por ultimo faltou ; no final de 

char uma_string[30] //cria a variável string

 

Sequência de caracteres é " %s" e não "%c", pois dessa maneira se pegou apenas 1 caractere.

scanf("%c", &uma_string);

 

 

Referência

Cplus - Função scanf.

  • Curtir 1
Postado

Muito obrigado, colega. Ajudou-me muito.

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

int conta_consoantes(char string[])
{
	int i = 0;
	int vogais = 0;
	while (string[i] != '\0'){
	if (string[i] == 'a' || string[i] == 'A'){
	vogais++;
	}
	if (string[i] == 'e' || string[i] == 'E'){
	vogais++;
	}
	if (string[i] == 'i' || string[i] == 'I'){
	vogais++;
	}
	if (string[i] == 'o' || string[i] == 'O'){
	vogais++;
	}
	if (string[i] == 'u' || string[i] == 'U'){
	vogais++;
	}
	i++;
	}
	return vogais;
}

int main(void)
{
	char uma_string[30]; //cria a variável string
	printf("Informe uma palavra ou frase que deseja saber quantas consantes tem: \n"); //recebe a palavra ou frase
	scanf("%s", &uma_string); //armazena a pavra ou frase na variável uma_string
	int vogais = conta_consoantes(uma_string); //Aqui o programa atribui o valor de uma_string a variável vogais
	printf("A quantidade de consoantes eh: %d \n"); //Programa imprime a quantidade de string na frase
	system("pause");
}

O erro agora consiste em em o programa não conseguir contar caracteres de string de nomes compostos (tipo: joao pedro - retorna 4 caracteres de 'joao') e também não estou acertando definir como a função WHILE pega minha string conta os caracteres totais e subtrai as vogais para me retornar o número de consoantes. Agradeço desde já.

  • Membro VIP
Postado

Olá @jpaulofsa.

 

2 horas atrás, jpaulofsa disse:

O erro agora consiste em em o programa não conseguir contar caracteres de string de nomes compostos (tipo: joao pedro - retorna 4 caracteres de 'joao') e também não estou acertando definir como a função WHILE pega minha string conta os caracteres totais

No While tente usar como parâmetro o tamanho da string , algo como length() ou algo do tipo (ir de 1 até o valor da quantidade de letras que a string tem). A depender mude para for, já que a quantidade é predeterminada e não existe outro parâmetro de parada;

 

 

 

2 horas atrás, jpaulofsa disse:

conta os caracteres totais e subtrai as vogais para me retornar o número de consoantes. Agradeço desde já.

Nesse caso você é considerando como uma espécie de dicotomia, ou seja, como se "tudo que não é vogal, é necessariamente uma consoante". E isso não é verdade. Veja que existe ".", ",", "@", "!" entre outros caracteres especiais... logo, apesar de ser uma boa sacada, não é totalmente preciso.

 

No aguardo.

  • Curtir 1
Postado
5 horas atrás, jpaulofsa disse:

O erro agora consiste em em o programa não conseguir contar caracteres de string de nomes compostos (tipo: joao pedro - retorna 4 caracteres de 'joao')

a função scanf possui algumas mascaras. Para este caso use esta mascara: "%29[^\n]s"

  • O número é o tamanho máximo do string ( tome o tamanho do vetor -1).
  • Esta parte [^\n] indica que a função vai capturar todos caracteres ate que uma nova linha surja.

 

5 horas atrás, jpaulofsa disse:

também não estou acertando definir como a função WHILE pega minha string conta os caracteres totais e subtrai as vogais para me retornar o número de consoantes

        while (string[i] != '\0'){
            ...
/// Conta os caracteres ignorando os ESPAÇOS.
            if (' ' != string[i]) qnt_caracteres = 1 + qnt_caracteres;

            i++;
            }
return qnt_caracteres - vogais;

 

Referência
cplus: Function cstdio::scanf

  • Curtir 2
Postado
11 horas atrás, Simon Viegas disse:

Olá @jpaulofsa.

 

No While tente usar como parâmetro o tamanho da string , algo como length() ou algo do tipo (ir de 1 até o valor da quantidade de letras que a string tem). A depender mude para for, já que a quantidade é predeterminada e não existe outro parâmetro de parada;

 

 

 

Nesse caso você é considerando como uma espécie de dicotomia, ou seja, como se "tudo que não é vogal, é necessariamente uma consoante". E isso não é verdade. Veja que existe ".", ",", "@", "!" entre outros caracteres especiais... logo, apesar de ser uma boa sacada, não é totalmente preciso.

 

No aguardo.

obrigado pelas digas, mas não vi muitos desses conceitos ainda. Sobre a "dicotomia", de acordo com o pouco que vimos até agora é como se os caracteres recebidos fossem só vogais e consoantes mesmo, inclusive sem acentos...mas muito obrigado, mesmo, pela atenção!

adicionado 33 minutos depois
9 horas atrás, Mauro Britivaldo disse:

a função scanf possui algumas mascaras. Para este caso use esta mascara: "%29[^\n]s"

  • O número é o tamanho máximo do string ( tome o tamanho do vetor -1).
  • Esta parte [^\n] indica que a função vai capturar todos caracteres ate que uma nova linha surja.

Não tinha estudado esse comando ainda, obrigado! Mas não conseguir que o programa não conte o espaço em branco como caractere.


        while (string[i] != '\0'){
            ...
/// Conta os caracteres ignorando os ESPAÇOS.
            if (' ' != string[i]) qnt_caracteres = 1 + qnt_caracteres;

            i++;
            }
return qnt_caracteres - vogais;

Não consigo fazer com que o programa não conte os espaços como caractere e nem conseguir fazer para retornar somente a quantidade de consoantes...

 

Citação

 

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

int conta_consoantes(char string[])
{
	int i = 0;
	int vogais = 0;
	int qnt_caracteres = 0;
	while (string[i] != '\0'){
	if (string[i] == 'a' || string[i] == 'A' || string[i] == 'e' || string[i] == 'E' || string[i] == 'i' || string[i] == 'I' || string[i] == 'o' || string[i] == 'O' || string[i] == 'u' || string[i] == 'U'){
	vogais++;
	}
	if (' ' != string[i]) qnt_caracteres = 1 + qnt_caracteres;{
    i++;
    }
	}
	return qnt_caracteres - vogais;
}

int main(void)
{
	char uma_string[30]; //cria a variável string
	printf("Informe uma palavra ou frase que deseja saber quantas consantes tem: \n"); //recebe a palavra ou frase
	scanf("%29[^\n]s", &uma_string); //armazena a palavra ou frase na variável uma_string, O número é o tamanho máximo do string ( tome o tamanho do vetor -1) e [^\n] indica que a função vai capturar todos caracteres ate que uma nova linha surja.
	int vogais = conta_consoantes(uma_string); //Aqui o programa atribui o valor de uma_string a variável vogais
	printf("A quantidade de consoantes eh: %d \n"); //Programa imprime a quantidade de string na frase
	system("pause");
}

 

Postado
7 horas atrás, jpaulofsa disse:

int vogais = conta_consoantes(uma_string); //Aqui o programa atribui o valor de uma_string a variável vogais

printf("A quantidade de consoantes eh: %d \n"); //Programa imprime a quantidade de string na frase

system("pause");

@jpaulofsa , esqueceu de colocar o argumento para máscara [%d] contida na função printf.

printf("A quantidade de consoantes eh: %d \n", vogais);

O programa procede!

Capturar.PNG

  • Curtir 1
Postado

Muito obrigado! sem sua, verdadeira, aula e paciência não teria conseguido. não tinha visto alguns dos conceitos e sem eles não teria como criar o programa, além do mais, alguns dos conceitos que já tinha visto não tinha a noção de suas verdadeiras funções. ficou poucas dúvidas, mas ao longo do curso acredito que consigo sanar. grande abraço.

Capturar.JPG

  • Curtir 1
  • Membro VIP
Postado

Só complementando:
 

- No código está chamado de vogais o que está usando como "quantidade de consoantes". É um contrassenso. :)

Em 28/12/2017 às 01:43, jpaulofsa disse:

int vogais = conta_consoantes(uma_string);

 

Sugeriria algo como qtdConsoantes, ou consoantes mesmo.

 

 

 

- A parte da não dicotomia ainda está em jogo, ex.:

teste.jpg

 

A resposta tinha que ser 2, correto?. Ai também entra a questão das vogais acentuadas, mas principalmente que está associando que uma consoante é o mesmo que uma "não vogal", o que está tecnicamente errado. Os caracteres NÃO são compostos só de vogais e consoantes! Esses outros tipos.

 

 

 

 

  • Curtir 1
Postado

@Simon Viegas muito obrigado pelas dicas, Simon. Realmente a questão do contrassenso de criar a variável vogais para consoantes eu tinha percebido e é uma excelente observação sua. Não mudei pelo fato de estar iniciando e após bater cabeça com o que parece "simples", para alguns, fiquei com receio de dar problema de novo no programa.

Quanto ao fato da "dicotomia", como havia falado, não vi ainda bibliotecas que aceita acentuação gráfica e outros conceitos e por isso o programa foi feito como se só existisse vogais e consoantes mesmo e em letras minúsculas, sem acentos...

 

Agradeço muito sua observação e dicas, contribuiu e vai contribuir muito para meu aprendizado...Deus retribua em dobro a vocês, pois "quem ensina algo, aprende duas vezes". 

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