Jump to content
  • 0
Leonardo Pimenta

Programa em C que deve retornar numeros de vogais, consoantes e caracteres especiais(não especificados)

Question

Eis o programa para contagem de vogais e consoantes pronto.

A questão é como contar os caracteres especiais sem especificá-los.

Adicionei um }else{

                              especiais += 0;

                        }

...porém assim obtenho  números

#include <stdio.h>
#include <string.h>

void quantidade(char *texto, int contador);
int main(){
	char texto[255];
	int contador;
	gets(texto); 
	contador = strlen(texto);
	quantidade(texto, contador);
	return 0;
}
void quantidade(char *texto, int contador){
	char alf[27]={'a','e','i','o','u','b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z','\0'};
	int i, j, vogais=0, consoantes=0;
	for(i=0;i<contador;i++){
		for(j=0;j<27;j++){
			if(texto[i] == alf[j] && j < 5){
				vogais += 1;
			}else if(texto[i] == alf[j] && j >= 5){
				consoantes += 1;
			}
		}
	}
	printf("Vogais:%d\n",vogais);
	printf("Consoantes:%d\n",consoantes);
}
	

arbitrariamente grandes(sim,declarei int especiais=0 antes).

 

 

Share this post


Link to post
Share on other sites

3 answers to this question

Recommended Posts

  • 0

Leonardo olá 

Podes utilizar o int é igual ...

 

// Exemplo TESTE.
#include <stdio.h>
#include <string.h>

void quantidade(char *texto, int contador){
	char alf[27] = { 'a', 'e', 'i', 'o', 'u', 'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z', '\0' };
	int i, j, vogais = 0, consoantes = 0, especiais = 0;
	int vogal_or_consoante = 0;
	for (i = 0; i<contador; i++){
		for (j = 0; j<27; j++){
			if (texto[i] == alf[j] && j < 5){
				vogais += 1;
				vogal_or_consoante = 1;
			}
			else if (texto[i] == alf[j] && j >= 5){
				consoantes += 1;
				vogal_or_consoante = 1;
			}
		}
		if (vogal_or_consoante == 0)
		{
			especiais++;
		}
		else
		{
			vogal_or_consoante = 0;
		}
	}
	printf("Vogais:%d\n", vogais);
	printf("Consoantes:%d\n", consoantes);
	printf("Especiais:%d\n", especiais);
}

int main(array<System::String ^> ^arg){
	char texto[255];
	int contador;
	gets(texto);
	contador = strlen(texto);
	quantidade(texto, contador);
	return 0;
}

Podes utilizar qualquer variável para fazeres isto... Apenas utilizei o "bool" por ser mais simples de entender...

 

Abraço,

Vítor Mendes

  • +1 1

Share this post


Link to post
Share on other sites
  • 0

Bom dia Leonardo

 

Então uma forma simples de fazer, que fiz aqui é da seguinte forma :

// Exemplo TESTE.
#include <stdio.h>
#include <string.h>

void quantidade(char *texto, int contador){
	char alf[27] = { 'a', 'e', 'i', 'o', 'u', 'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z', '\0' };
	int i, j, vogais = 0, consoantes = 0, especiais = 0;
	bool vogal_or_consoante = false;
	for (i = 0; i<contador; i++){
		for (j = 0; j<27; j++){
			if (texto[i] == alf[j] && j < 5){
				vogais += 1;
				vogal_or_consoante = true;
			}
			else if (texto[i] == alf[j] && j >= 5){
				consoantes += 1;
				vogal_or_consoante = true;
			}
		}
		if (vogal_or_consoante == false)
		{
			especiais++;
		}
		else
		{
			vogal_or_consoante = false;
		}
	}
	printf("Vogais:%d\n", vogais);
	printf("Consoantes:%d\n", consoantes);
	printf("Especiais:%d\n", especiais);
}

int main(array<System::String ^> ^arg){
	char texto[255];
	int contador;
	gets(texto);
	contador = strlen(texto);
	quantidade(texto, contador);
	return 0;
}

 

Havia melhor formas para o fazer... Mas enfim foi a forma mais rápida xD, pelo que testei aqui parece-me fazer o que queres..

 

Agora porque é que ao meteres um else dentro do 2 ciclo for não funciona simples repara o teu 2 ciclo for vai percorrer o array alf e comparar um a um carácter desse array com o array texto, ou seja vai haver muitas ocasiões em que por exemplo o carácter seja uma vogal ou até mesmo uma consoante mas que não seja igual naquele momento ao carácter do array alf e ai iria para o else e seria identificado como carácter especial e ficaria assim até que o carácter fosse igual ao carácter do array alf.

 

O que fiz foi criar uma variavel booleana ou true ou false sempre que no teu 2 ciclo for é detectada uma vogal ou consoante esta variável irá ficar true quando sair do 2 ciclo for vamos se ela está false se for false significa que o carácter nem é vogal nem consoante ou seja é "especial" então somamos +1 à variável caso contrario se foi detectado um carácter então vamos meter a variável de novo a false para podermos saber se o 2 carácter é ou não especial e por ai em diante ...

 

Já agora uma pergunta utilizas que compilador ?

Pergunto porque nestes casos os pontos de paragem ajudam bastante a perceber a lógica principalmente para iniciantes quando estudava utilizava muito enfim, fica a dica..

Eu utilizo VisualStudio 2013

 

Abraço,

Vítor Mendes

 

  • +1 1

Share this post


Link to post
Share on other sites
  • 0

Vitor Mendes , utilizo o compilador que vem no próprio Ubuntu, pelo terminal.

Entendi o meu erro, mas terei que fazer sem usar "Bool", pois ainda não aprendi isso, estou cursando Algoritmos e Estruturas de Dados I no curso de Eng. da Computação.

Pretendo usar a tabela ASCII pra ficar mais fácil.

De qualquer maneira obrigado pela atenção.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By sidius
      ei galera, minha professora pediu para que eu calculasse matrizes utilizando a linguagem c, poderiam me dar uma luz ae?? ficaria grato, tenho grande dificuldade no assunto

    • By juliaKrunker
      1- O comando typedef pode ser utilizado para criar novos comandos, ou simplesmente novas formas de escrever
      determinados comandos em linguagem C. Por exemplo, toda vez que você quiser criar uma variável do tipo struct
      declarado acima, terá que escrever o nome completo do tipo, isto é struct lista. Usando o comando typedef, defina um
      tipo alternativo, chamado Lista, que possa ser usado em lugar de struct lista.

      2-  Usando o tipo Lista que você criou na questão 3, declare uma variável chamada myList que possa ser utilizada para
      construir uma lista encadeada.
       
      3- (0,5) Usando o tipo Lista que você criou na questão 3, declare uma variável chamada novo que possa ser utilizada para criar
      um novo elemento para a lista declarada na questão 4.

      4- Escreva uma linha de código que aloque espaço na memória para a variável novo declarada na questão 5, de forma
      que a variável possa ser utilizada para inserir um novo elemento na lista myList declarada na questão 4.

      5 -Considerando a variável myList declarada na questão 4 e a variável novo declarada na questão 5 e alocada na questão
      6, atribua os valores 1 para o atributo id e 9.1 para o atributo valor e insira-a na lista myList.
       
      6- O trecho de código apresentado a seguir, refere-se a uma função que receberá como parâmetro um ponteiro para
      uma lista do tipo Lista e deverá calcular e retornar a média dos valores existentes na lista. Escreva o corpo da função.

    • By E.E.E
      Galera meu prof mandou fazer essa tarefa e eu fiz so uma parte dela , podem me ajudar com o resto ?
       
        Criar um programa que leia e mostre 
      as notas e faltas de 10 alunos em uma 
      matriz utilizando seus índices como seus
      respectivos códigos.

      O programa deverá solicitar:
      Média para aprovação:
      Média para recuperação
    • By reberthkss
      Bom dia!
       
      Estou desenvolvendo meu primeiro jogo da velha, e estou encontrando um problema quando aperto a tecla ENTER. O que acontece é que quando aperto ENTER, o programa o reconhece como um comando de caracter e retorna um valor para quando digitam um caracter diferente de X e O. Abaixo fotos:
      Antes de apertar o ENTER:

      Após apertar o ENTER

       
      CÓDIGO:
       
       
       
       
    • By edvaldo joviano de paula
      Prezados, boa tarde!
      Preciso de uma ajuda sendo possível:
       
      Tenho o seguinte cenário em uma consulta ( formação de kits de produtos tendo como produto principal um valor igual, ex: produto 1 é formado pelos produtos 2 e 3)
      select codkit, produtos from kit where codkit = 1
      ---   ----
      1    2
      1    3
      Percebem que o resultado traz o codigo do kit (1) e os produtos que compoem este kit (2,3), porem o produto 2 tambem faz parte do kit 4 junto com o produto 10 e produto 3 faz parte do kit 5 junto com o produto 11 sendo:
      kit 1 (2,3)
      kit 4 (2,10)
      kit 5 (3,11).
       
      Eu preciso de uma ajuda sobre alguma função que ao comprar os produtos 2 e 3 e estes estando na mesma nota fiscal (select produtos from notafiscal = x) traga o resultado do kit que estes dois produtos juntos formam, exemplo, ao pesquisar (select produtos from notafiscal = x) nesta nota existir os produtos 2 e 3 traga o resultado 1, se na nota existir os produtos 2 e 10 traga o resultado 4 e se existir na consulta dos itens da nota os itens 3 e 11 o resultado seja 5. Caso na pesquisa eventualmente existir por exemplo 10 unidades do item 2, 5 unidades do item 3 e 5 unidades do item 10, o resultado deve ser 1 e 4 pois 5 unidades do 2+5 unidades do 3 forma o kit 1 e 5 unidades do 2+ 5 unidades do 10 formam o kit 4.
       
      Espero ter explicado de forma a ser entendido e agradeço a ajuda.
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.