Logo Hardware.com.br
Amapoet
Amapoet Novo Membro Registrado
5 Mensagens 1 Curtida

[Resolvido] Transformar letras em números? C++

#1 Por Amapoet 22/04/2015 - 16:03
Olá! Tenho um exercício para entregar que consiste no seguinte(é necessário que seja em C++):

Transformar palavra em número → transformar cada letra em um número (dado pela ordem alfabética, A como 1, B como 2, e assim por diante, contando W, K e Y) e depois somar o total.

O que vai acontecer é o seguinte, pelo que entendi, o usuário digita uma palavra ou letras aleatórias e o programa retorna números correspondentes as letras da palavra e, depois, soma essas letras e mostra o total.

Por enquanto estou preocupada mais com a primeira parte (apenas de transformar as letras em números). Pensei em fazer utilizando switch ou ifs, porém pelo que entendi, o swicth apenas aceita inteiros, então talvez eu tenha que utilizar alguma função que transforme char para int ? Também pensei em criar um char[26] para cada letra do alfabeto e ir determinando char[1] = a ou algo assim e depois mostrar apenas os números correspondentes as letras que o usuário escolheu, mas não sei bem como isso é possível de se fazer. Estou meio confusa com relação a isso. Agradeço qualquer ajuda que possa esclarecer como fazer essa questão.
esquiloesperto
esquiloesper... Cyber Highlander Moderador
7.1K Mensagens 2.2K Curtidas
#2 Por esquiloesper...
22/04/2015 - 23:46
Bom, pelo que deu a entender, você pretende começar a sequência a partir de "1" e indo até o número "26".
Existem diversas formas de fazer. Inclusive da maneira que você descreveu pela criação de um vetor 'Array' não há problema algum.

- Mas eu prefiro utilizar o próprio identificador de cada letra para este fim:

Dado que cada letra já possui um número universal em ASCII para a sua identificação que já seguem uma ordem sequencial, você só precisa utilizar estes valores subtraindo o excedente de forma que na letra "A" seja obtido o número "1".

Aqui está a tabela ASCII universal: http://www.asciitable.com/

Observe que a letra "A" = 65, mas a letra "a" = 97. Daí a necessidade de converter as letras inseridas para um padrão comum em maiúsculas ou minúsculas: Você decide. Feito isto basta subtrair 64 ou 96 do valor obtido para obter os índices [1..26].

Daí o restante fica mais fácil:

[LIST=1]
- Armazenar a palavra ou frase digitada numa variável qualquer
- Converter o valor recebido para maiúsculas ou minúsculas
- Criar a variável "soma = 0"
- Percorrer a entrada letra por letra (loop) usando o tipo "char"
- Extrair (64 ou 96) de cada letra para obter valores entre 1 e 26
- Somar cada valor usando a variável 'soma'
- Imprimir a 'soma'
[/LIST]

OBS: Para obter o valor numérico de um caractere basta fazer assim:
ver Wiki (dica) = http://pt.wikibooks.org/wiki/Programar_em_C++/Entrada_e_saída_de_dados#Lendo_um_caractere

[CODE='C++']
#include

using namespace std;

int main(int, char **)
{
char c = 'a'; // Aqui representa cada letra do Loop

char ascChar = toupper(c); // "a" => "A"

int x = ascChar - 64; // 65 - 64 = 1

... // Continue a codificar já usando x = [1..26]
}
[/CODE]
Só é difícil enquanto estiver oculto! cool.png
Use a pesquisa


rolleyes.png  Navegar é preciso, viver... também.  smile.png
Amapoet
Amapoet Novo Membro Registrado
5 Mensagens 1 Curtida
#4 Por Amapoet
24/04/2015 - 20:45
esquiloesperto disse:


Obrigada! Após ver a sua ideia e algumas outras pesquisando, acabei chegando a fazer com switch case. Ficou mais ou menos algo como

[CODE='C++']
[...]
case 'a': cout << 1 << endl; break;
[/CODE]

Sendo que o switch estava dentro de um for controlado por uma variável de controle (no max 200 palavras, por exemplo) smile.png
A parte de somar que seria o fim do exercício fiz meio que uma gambiarra que espero que seja aceita rsrs
Criei uma variárel que soma a cada caso encontrado, o único problema é que tenho que colocar o código dentro do switch e do for ( no fim ) e por isso a "soma" fica sempre atualizando a cada linha de código. Para isso ficar menos confuso utilizei alguns couts e espero que dê tudo certo assim xD. O resultado na tela fica mais ou menos como
Usuário digita ab
numero correspondente a A: 1
soma até agora: 1
número correspondente a B: 2
soma até agora: 3

Será que, apenas a nível de curiosidade, eu tenho como restringir essa soma para aparecer apenas no fim? O problema é que como fiz com switch depois que ele entra nos casos ele não mostra mais nada fora disso.
Mas obrigada pela ajuda !! big_green.png
esquiloesperto
esquiloesper... Cyber Highlander Moderador
7.1K Mensagens 2.2K Curtidas
#5 Por esquiloesper...
24/04/2015 - 21:59
- Toda solução é uma solução potencial. E com a sua solução não é diferente.
Existem maneiras mais econômicas de fazer? - Claro que sim. Mas isto se aprende com tempo.

Ah, e para não exibir a soma a cada passo basta retirar a exibição para fora do loop (for); Exibindo somente depois de concluída toda a varredura.
Só é difícil enquanto estiver oculto! cool.png
Use a pesquisa


rolleyes.png  Navegar é preciso, viver... também.  smile.png
© 1999-2025 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal