Jump to content

String em C


matheus

Recommended Posts

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

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

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

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

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

  • 1 month later...

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

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.