Ir para o conteúdo
256mxr

Duvidas Programa

Mensagens Recomendadas

256mxr    0
256mxr

Escreva um programa que lê uma linha de texto do standard input e apresenta o número de ocorrências de cada letra do alfabeto (considere letras maiúsculas e minúsculas como sendo equivalentes). Assuma que o texto se encontra codificado em ASCII e que, portanto, não existem caracteres acentuados no texto.

Sugestão: Utilize um vector para guardar os contadores correspondentes às 26 letras possíveis.

Queria saber qual a melhor maneira de resolver isto com vectores???

Tava a pensar em criar um vector para ficar em cada posiçao a letra inserida na frase

E depois outro vector com as 26 letras e outro vector de inteiros com o num das ocorrencias o v[0] era pa letra e assim respectivamente...

N postem o programa ok? é pa depois saber escreve-lo

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
marinheiro    0
marinheiro

primeiro, passas o texto todo para maiusculas... depois, só necessitas de 1 vector que é o que guarda o numero de ocorrências de cada letra...

fazes um ciclo que corre todo o texto e verificas se é uma letra... se for, verificas qual o valor ascii correspondente, subtrais 65 (se for A, o valor ascii é 65 e subtraindo 65 ficas com o indice do vector igual a 0, que é o primeiro e vai representar a 1ª letra) e incrementas o indice respectivo do vector com o valor da subtração anterior... quando for para apresentar os valores, fazes um ciclo de 0 a 25 e, se for diferente de 0, é só acrescentares 65 ao valor do indice, mostrar o respectivo caracter e o valor que está armazenado no indice do vector...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
256mxr    0
256mxr

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main()
{
    string linha;
    getline(cin,linha);
    
    vector <int> v1 (26,0);
    
     
    for(int i=0;i<=linha.length()-1;i++) 
    {       
            if (linha[i]>='A' && linha[i]<='Z')
            {
            int j=linha[i]-65;
            
                    v1[j]++;
            
    }
    for(int j=0;j<v1.size();j++)
    {
    char letra = (char)('A'+j);
     cout << letra << v1[j] << endl;
     }
    system("pause");
    return 0;
}
}

Esta foi a minha tentativa mas n esta a funcionar, apenas conta a primeira letra

N percebo pk n funciona po resto das letras???? ;)

Help me

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
marinheiro    0
marinheiro

muito sinceramente, agora não te posso ajudar... o que eu faria noutra linguagem, é o que descrevi em cima... c (qualquer deles) não percebo nada... a ver se começo com o c# agora...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
marinheiro    0
marinheiro

eu não percebo de c minimamente, por isso desculpem se as perguntas são descabidas ;)

qual é a instrução que te passa todas as letras para maiúsculas?

na linha onde tens o int j=... não deveria ler qual o valor ascii do linha[ i] e então subtrair o 65? ou o comando como está já o faz?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    311
Rui Carlos

na linha onde tens o int j=... não deveria ler qual o valor ascii do linha[ i] e então subtrair o 65? ou o comando como está já o faz?

em C/C++ um char é também um inteiro, por isso pode-se subtrair directamente 65 ao caracter.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
merlin3000    0
merlin3000

O problema são mesmo as {}.

Já agora devias usar o primeiro for deste modo

for(int i=0;i<linha.length();i++)

senão se não inserires caracteres ele dá erro.

O programa só tá a contar as maiúsculas é suposto?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
marinheiro    0
marinheiro

é, se a string for passada toda para maiúsculas, que é o que não sei se realmente foi passada...

em C/C++ um char é também um inteiro, por isso pode-se subtrair directamente 65 ao caracter.

gracias ;) é uma situação que desconhecia ;)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Saco    0
Saco

Como já foi dito, falta uma } a fechar o if.

E como também já foi dito, esse programa só conta as maiúsculas. Para contar também as minúsculas basta acrescentares outro if a seguir ao que já tens, mas para as letras minúsculas em que em vez de subtrair 65 subtrais 97.

Já agora em vez de subtrair 65 e 97 podias subtrair 'A' e 'a' respectivamente.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Saco    0
Saco

@saco, porquê crescentar mais um if se pode resolver tudo com um só comando (digo eu), passando a string para maiúsculas?

Se passares para maiúsculas estás a usar mais um comando, portanto... em número de comandos fica igual.

E não é coisa que se note num programa deste tamanho, mas passar tudo para maiúsculas tem menos eficiência, porque nesse caso tens de percorrer o array duas vezes.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
marinheiro    0
marinheiro

pensei que houvesse uma função que passasse automáticamente uma string para maiúsculas, como há em tantas outras linguagens...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
NuGuN    2
NuGuN

pensei que houvesse uma função que passasse automáticamente uma string para maiúsculas, como há em tantas outras linguagens...

Estou certo que deve haver. Pelo menos em C existe, se não estou enganado é toupper() e tolower()

Cumps

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    311
Rui Carlos

pensei que houvesse uma função que passasse automáticamente uma string para maiúsculas, como há em tantas outras linguagens...

Estou certo que deve haver. Pelo menos em C existe, se não estou enganado é toupper() e tolower()

isso é para caracteres e não strings (mas para strings também é só fazer um ciclo).

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade