matheus Posted September 16, 2019 at 01:09 AM Report Share #616171 Posted September 16, 2019 at 01:09 AM 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 comment Share on other sites More sharing options...
RVicente Posted September 16, 2019 at 11:34 AM Report Share #616174 Posted September 16, 2019 at 11:34 AM (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 at 11:38 AM by RVicente 1 Report Link to comment Share on other sites More sharing options...
antseq Posted September 16, 2019 at 03:00 PM Report Share #616175 Posted September 16, 2019 at 03:00 PM 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 comment Share on other sites More sharing options...
matheus Posted September 23, 2019 at 03:52 AM Author Report Share #616210 Posted September 23, 2019 at 03:52 AM 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 comment Share on other sites More sharing options...
HappyHippyHippo Posted September 30, 2019 at 08:41 PM Report Share #616261 Posted September 30, 2019 at 08:41 PM 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 comment Share on other sites More sharing options...
PsySc0rpi0n Posted November 9, 2019 at 11:39 PM Report Share #616560 Posted November 9, 2019 at 11:39 PM 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 comment Share on other sites More sharing options...
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