La conversion des lettres en nombres dans C++
PROBLÈME RÉSOLU: merci à tous!
Je suis presque entièrement novice en C++ donc je m'excuse à l'avance si la question semble banale.
Je suis en train de convertir une chaîne de lettres à un ensemble de 2 chiffres, où a = 10, b = 11, ..., Y = 34, Z = 35 de sorte que (par exemple) "abc def" va "101112131415". Comment pourrais-je aller sur le faire? Toute aide serait vraiment appréciée. Aussi, je n'ai pas l'esprit si la capitalisation des résultats dans le même nombre ou un nombre différent. Merci beaucoup à l'avance. Je n'aurai probablement pas besoin pour quelques jours, mais si quelqu'un est un sentiment particulièrement agréable comment pourrais-je aller sur d'inverser ce processus? c'est à dire "101112131415" --> "abcdef" Merci.
EDIT: Ce n'est pas de devoirs, je suis entièrement autodidacte. J'ai terminé ce projet avant dans une langue différente et a décidé d'essayer C++ pour comparer les différences et essayer d'apprendre le C++ dans le processus 🙂
EDIT: j'ai à peu près ce que je veux, j'ai juste besoin d'un peu d'aide de la conversion de cette sorte qu'elle s'applique à des chaînes, merci les gars.
#include <iostream>
#include <sstream>
#include <string>
int returnVal (char x)
{
return (int) x - 87;
}
int main()
{
char x = 'g';
std::cout << returnVal(x);
}
- Une première étape pourrait être de regarder la valeur de
'z' - 'a'
. - "123" = 1*100 + 2*10 + 3*1
- Une autre question intéressante sera le résultat de
'a'-'A'
- Vous avez seulement besoin
10+str[i]-'a'
. - Pourquoi devrions pas nous, vous code de date
- Désolé, je suis en train de refaire un projet dans une langue qui est nouveau pour moi et c'est pourquoi la question semble si anodin. Ce n'est pas de devoirs.
- Notez qu'un personnage est déjà un entier. Le problème est que le
std::cout
est surchargé d'imprimer la représentation des caractères plutôt que la représentation entière.
Vous devez vous connecter pour publier un commentaire.
Chaque personnage a ses valeurs ASCII. Essayez de convertir vos caractères en ASCII puis de manipuler la différence.
Exemple:
imprime 97; et
va imprimer 10.
Par conséquent, vous pouvez écrire une fonction comme ceci:
pour obtenir la sortie requise.
Et votre programme principal pourrait ressembler à:
Un portable méthode consiste à utiliser une table de recherche:
Ce que Daniel dit, l'essayer pour vous-même.
Comme un point de départ mais, casting:
vous obtiendrez votre numéro de caractère, et:
stringstream
seront utiles aussi.En essayant de faire quelque chose première, et la recherche de l'aide que si vous sentez que vous ne pouvez pas avancer.
Cela étant dit, la solution la plus évidente qui vient à l'esprit est basée sur le fait que les personnages (c'est à dire
'a'
,'G'
) sont vraiment des nombres. Supposons que vous disposez des éléments suivants:Vous pouvez obtenir le numéro associé à
c
par:Ensuite, ajouter un peu de décalage à 'n':
...et de le jeter en arrière pour un
char
:Remarque: ce qui précède suppose que les caractères sont consécutifs, c'est à dire le nombre correspondant à
'a'
est égal à celui correspondant à'z'
moins la quantité de lettres entre les deux. Généralement, cela se tient, cependant.Cela peut fonctionner
int Number = 123; //number to be converted to a string
string Result; //string which will contain the result
ostringstream convert; //stream used for the conversion
convert << Number; //insert the textual representation of 'Number' in the characters in the stream
Result = convert.str(); //set 'Result' to the contents of the stream
vous devez ajouter cette les en-têtes
#include <sstream>
#include <string>
De nombreuses réponses vont vous dire que les caractères sont codés en ASCII et que vous pouvez convertir une lettre à un indice en soustrayant
'a'
.Ce n'est pas bon C++. Il est acceptable lorsque les exigences de votre programme d'inclure une spécification ASCII est en cours d'utilisation. Cependant, la norme C++ seul ne l'exige pas. Il existe en C++ implémentations avec d'autres jeux de caractères.
En l'absence de connaissance que l'ASCII est en cours d'utilisation, vous pouvez utiliser les tables de traduction:
Alors vous pouvez traduire les lettres aux chiffres en regardant dans la table:
Une fois que vous avez la traduction, vous pouvez l'imprimer en deux chiffres à l'aide de
printf("%02d", result);
.La traduction dans l'autre sens, nécessite la lecture des deux personnages, en les convertissant en un certain nombre (de l'interprétation qu'en décimal), et la réalisation d'un analogue de la traduction. Vous pourriez avoir une autre table de traduction mis en place pour cette traduction inverse.