matheus 0 Posted September 16, 2019 Report Share Posted September 16, 2019 Boa noite amigos, estou com duvida em uma questao da faculdade e nao consigo solucionar. 9) Escrever um programa em C que calcule e imprima o número de caracteres distintos presentes em uma cadeia de caracteres dada. Considerar o tamanho máximo da cadeia como sendo de 80 colunas. #include <stdio.h> #include <stdlib.h> #include <string.h> #define n 64 int main (void) { char nome[n]; int i,j,count=0; printf("\nDigite uma frase: "); fgets(nome, 64, stdin); //stdin = leitura está sendo feita do teclado. for(i=0;i<strlen(nome) != '\0';i++) { count++; } printf("\nA frase digitada foi: %s ", nome); printf("\nA quantida de letras foi de: %d", count); return 0; } Estava tentando ler a string sem contar com os espaços, porem nao consigo. Se alguem conseguir me ajudar nesta questao, ficarei grato. Link to post Share on other sites
RVicente 2 Posted September 16, 2019 Report Share Posted September 16, 2019 (edited) Olá. Permite-me primeiro fazer alguns reparos ao código em si. É boa prática que os #defines sejam em letra maiúscula. Depois, é bom também utiliza-los coerentemente, ou seja, fgets(nome, N, stdin); em vez do valor hardcoded. Depois, for (i=0; i < strlen(nome) != '\0'; i++) { count++; } isto é redundante. Faz exatamente o mesmo do que o strlen(). " i < strlen(nome) != '\0' " Acho que devias rever isto. Não sei se percebes muito bem o que é que a função strlen() faz, e o significado do '\0'. No entanto, aproveitando esse teu pedaço de código, deixo uma dica para os espaços: for (i=0; i < strlen(nome) != '\0'; i++) { if (nome[i] != ' ') count++; } A tua solução está a dar um caracater a mais. Mas deixo isso para resolveres, que também é preciso estudar um bocadinho Edited September 16, 2019 by RVicente 1 Report Link to post Share on other sites
antseq 91 Posted September 16, 2019 Report Share Posted September 16, 2019 13 horas atrás, matheus disse: 9) Escrever um programa em C que calcule e imprima o número de caracteres distintos presentes em uma cadeia de caracteres dada. Considerar o tamanho máximo da cadeia como sendo de 80 colunas. Ao ler o enunciado do problema, tenho uma leitura completamente diferente (provavelmente ainda o vai desenvolver), nomeadamente: - não vejo em lado algum que deve ignorar os espaços (para mim é um carácter normal) - diz caracteres distintos, portanto também não é para contar os outros (diferentes de espaços) mas sim os DISTINTOS Até fui procurar um calculo online, para demonstrar o que "leio" e encontrei este (https://www.somacon.com/p525.php) onde a string "Portugal a Programar" tem os seguintes caracteres DISTINTOS: Code: 32 0x20 ' ' Count: 2 Code: 80 0x50 'P' Count: 2 Code: 97 0x61 'a' Count: 4 Code: 103 0x67 'g' Count: 2 Code: 108 0x6C 'l' Count: 1 Code: 109 0x6D 'm' Count: 1 Code: 111 0x6F 'o' Count: 2 Code: 114 0x72 'r' Count: 4 Code: 116 0x74 't' Count: 1 Code: 117 0x75 'u' Count: 1 -----TOTAL CHARACTERS: 20 Não será uma aplicação com este tipo de resultado que deves desenvolver? 1 Report Link to post Share on other sites
matheus 0 Posted September 23, 2019 Author Report Share Posted September 23, 2019 Boa noite, obrigado pela ajuda de todos. Eu estava sem computador e não pude entrar para responde-los. Eu o fiz e acho que agora está certo, se quiserem conferir, agradeço. #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char texto[50]; int i,c, conta=0; int total; printf("\nDigite a frase: "); fgets(texto, 50, stdin); c = strlen(texto); printf("\n %s", texto); printf("\nNumero de letras incluindo espaço = %d", c); for(i=0; i<texto; i++) { if(texto==' ') { conta++; } } total = c - conta; printf("\nNúmero de espaços: %d",conta); printf("\nNumero de letras sem espaços = %d", total); return 0; } Link to post Share on other sites
HappyHippyHippo 1,162 Posted September 30, 2019 Report Share Posted September 30, 2019 On 9/23/2019 at 4:52 AM, matheus said: Boa noite, obrigado pela ajuda de todos. Eu estava sem computador e não pude entrar para responde-los. Eu o fiz e acho que agora está certo, se quiserem conferir, agradeço. #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char texto[50]; int i,c, conta=0; int total; printf("\nDigite a frase: "); fgets(texto, 50, stdin); c = strlen(texto); printf("\n %s", texto); printf("\nNumero de letras incluindo espaço = %d", c); for(i=0; i<texto; i++) { if(texto==' ') { conta++; } } total = c - conta; printf("\nNúmero de espaços: %d",conta); printf("\nNumero de letras sem espaços = %d", total); return 0; } se o código é para fazer o que enunciado pede, então está errado - não guarda uma frase com 80 caracteres - não conta caracteres distintos IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to post Share on other sites
PsySc0rpi0n 18 Posted November 9, 2019 Report Share Posted November 9, 2019 Eu apontava para algo deste género: Escrever uma função que: 1 - recebe duas strings (uma que é a string a avaliar e uma outra para guardar caractéres) 2 - percorre a string a avaliar, caractér a caractér, e compara cada caractér com os caractéres já presentes na segunda string passada. 3 - Se a comparação encontrar um caractér novo na string a avaliar, guardar esse caractér novo na segunda string, senão, continuar a percorrer a string a avaliar. 4 - Apresentar no terminal a segunda string. Isto foi apenas uma reflexão rápida sem pensar muito. Não sei se funciona ou se está a faltar muitos passos intermédios. Mas acho que pode ser um ponto de partida. Kurt Cobain - Grunge misses you Nissan GT-R - beast killer Link to post Share on other sites
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now