La conversion de chiffres en lettres de l'alphabet c++
Je suis en train d'écrire un code qui permettrait de convertir des nombres en lettres. Pour l'exemple 1, va être 'Un', 2 'B', 3 " C " et ainsi de suite. Im la pensée de l'écriture 26 si les déclarations. Je me demande si il ya une meilleure façon de le faire...
Merci!
Vous voudrez peut-être lire à propos de la
switch
déclaration. Il n'est pas optimale dans ce cas, mais c'est souvent un bon remplacement pour une grande chaîne de si-états.OriginalL'auteur Bhabes | 2012-02-13
Vous devez vous connecter pour publier un commentaire.
Utiliser un tableau de lettres.
si cela résout votre problème, vous devez l'accepter comme meilleure réponse
OriginalL'auteur Fred Foo
Si vous pouvez compter sur l'aide d'un jeu de caractères ASCII où ils sont consécutifs ensuite, vous pouvez convertir
Si l'on peut parfois compter sur ce fait que, par exemple, vous pouvez définir un compilateur drapeau ou similaire pour la cible, vous pouvez également utiliser ce code pour que le build spécifique.
Sinon utiliser un statique de la table de recherche (comme d'autres l'ont suggéré).
Note qu'il est préférable de "faire valoir" de votre gamme de vérifier si votre numéroté les données proviennent des variables de programme que vous savez ne doit jamais être hors de portée.
Si les données proviennent des données fournies par l'utilisateur, où les utilisateurs pourraient potentiellement fournir des voyous de données, vous avez besoin d'un moyen de gérer ce qui n'est pas "un comportement indéterminé". Par conséquent, vous devez vérifier chaque valeur et de jeter une exception (en informant l'utilisateur de corriger leurs données) ou l'utilisation de certains de ces caractères pour indiquer une mauvaise entrée.
Vous pouvez certainement vérifier statiquement que les travaux ci-dessus et l'utilisation de votre solution si il ne le fait pas. Lorsque les ci-dessus fonctionne, il est susceptible d'être une performance plus élevée que le compilateur va presque certainement inline cela, et si vous êtes en train de faire des millions de ces, il pourrait faire une différence.
merci pour votre réponse à mon post. Assurez-vous qu'il pourrait m'aider et à tous ceux qui se posent la même question.
Si le profileur vous dit que l'appel de fonction est un goulot d'étranglement, vous pouvez toujours en changer, mais je ne suis pas sûr de savoir comment vous pouvez dire de manière statique, et la table de la solution permet à tout imaginables de l'encodage.
Lors de la publication de ce code non portable, vous (à mon humble avis) doit ne statique, vérifiez ou faites un avertissement.
OriginalL'auteur CashCow
La façon la plus simple serait d'utiliser un tableau:
merci pour votre réponse à mon post. Assurez-vous qu'il pourrait m'aider et à tous ceux qui se posent la même question.
Et comment pouvez-vous déterminer quoi que ce soit de manière statique? Le fait que le dernier élément de la table moins la première est égale à un de moins que la longueur de la table ne veut pas dire que toutes les valeurs intermédiaires sont dans la gamme. Et selon le système, cela pourrait effectivement être plus vite que quelque chose comme
'A' + original
. (Plus probablement sur des systèmes plus anciens, mais on ne sait jamais.)Je serais très intéressé de savoir comment on pourrait s'appuyer sur le tri des chaînes correctement si vous ne pouvez pas garantir que vos personnages apparaissent dans l'ordre alphabétique. Il pourrait être utile d'avoir un arrangement AaBbCcDdEe etc. donc, vous obtenez même insensible tri correct mais si 'Z'-'A'==25 il est difficile de savoir ce que vous auriez mis dans le milieu de l'appliquer au travail.
La définition de "tri" en C++ n'est pas habituellement correspondent à rien en dehors de le monde de la programmation, au moins dans
"C"
et"POSIX"
locales. Les fonctions de comparaison destd::string
certainement ne pas faire quelque chose d'utile pour l'homme, le texte de langue.OriginalL'auteur James Kanze
quelque chose comme ça
merci pour votre réponse à mon post. Assurez-vous qu'il pourrait m'aider et à tous ceux qui se posent la même question.
OriginalL'auteur Maxim Kholyavkin
Si vous voulez convertir
0
àa
,1
àb
,2
àc
...25
àz
:De même, pour convertir
0
àA
,1
àB
,2
àC
...25
àZ
:Donc, si vous voulez convertir
1
àA
,2
àB
,3
àC
...26
àZ
, il suffit de soustraire1
décalage.OriginalL'auteur andykong10