Jump to content
matheus

String em C

Recommended Posts

matheus

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.

Share this post


Link to post
Share on other sites
RVicente

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 by RVicente
  • Vote 1

Share this post


Link to post
Share on other sites
antseq
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?

  • Vote 1

Share this post


Link to post
Share on other sites
matheus

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;

}

Share this post


Link to post
Share on other sites
HappyHippyHippo
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

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

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.