Quelle est la meilleure façon de convertir un numéro multi-chiffres en une chaîne d'alphabet en C #.
Par exemple,
Si j'ai un numéro dit, p> je veux que cela soit converti à une chaîne qui serait p> ceci Les moyens 1 représente un, 2 représente b et ainsi de suite. p> p>
6 Réponses :
faire un tableau de caractères: puis utilisez le numéro du chiffre comme indice de la matrice: p> base est le Un code de caractère p> Ceci est un pseudo code et je n'ai pas testé le! P> Il devrait fonctionner ... P> P>
Ce ne serait-il pas un peu surkill pour un seul arithmétique unicode?
J'ai écrit c'est pseudo code ... et pas si efficace. L'idée est la chose importante.
Nous avons écrit la même chose et la différence n'est que dans les facteurs constants de l'algorithme ... Je pense que votre -1 à mon message est faux. Vous écrivez "sortie = (char) ((char) 'A' + (courant - 1)) + sortie;" Mais cela ne va pas dans OO car chaque fois qu'il fait un nouvel objet. Donc, si vous avez 10 chiffres, il crée 10 objet en mémoire ... Utilisez StringBuilder à la place ... Je ne peux pas vous assigner -1 ...
Utilisez Dictionnaire classe, regardez cela. P>
Ce ne serait-il pas un peu surkill pour un seul arithmétique unicode?
Peut-être, mais c'est génial pour toute autre exigence
Quelque chose comme ceci:
int input = 123450; string output = ""; while (input > 0) { int current = input % 10; input /= 10; if (current == 0) current = 10; output = (char)((char)'A' + (current - 1)) + output; } Console.WriteLine(output);
Cela me donne B au lieu d'un au début.
Cette sortie n'est-elle pas équivalente "54321"?
Mise à jour de la réponse. Il devrait maintenant commencer par A.
@YTG Non. Les modules prennent le dernier numéro et à cause de cela, le personnage doit être mis à l'avant. Avec des modules, vous commencez à bâtir à partir de la fin de la chaîne de numéros jusqu'à l'avant.
Une dernière chose, pour 0 devrait donner à J, sa donnant un symbole @ en ce moment. La combinaison chiffre pourrait le nombre de combinaisons
@Wajih: Mise à jour de la réponse. Le courant est maintenant défini sur 10 afin qu'il produira J.
"sortie = (char) ((char) 'a' + (courant - 1)) + sortie;" La concaténation de la chaîne faite avec l'opérateur "+" n'est pas une bonne chose dans l'algorithme que vous proposez. Comme vous le voyez, votre algorithme est un peu surchargé en mémoire et à une allocation d'objet ..- -1 pour moi, -1 pour vous :-)
Assez juste :). Cependant, c'est que lorsque nous utiliserions un StressBuilder, nous devrions transformer la concaténation autour de la concaténation et cela rendrait la logique complexe de logique. Suggestions?
Il ne vaut pas la peine d'utiliser stringbuilder code> sauf si ce code fait partie d'une bibliothèque ou est un goulot d'étranglement; Le code est assez lisible tel quel et un
int code> ne sera pas assez grand pour que cela soit que i> horrifié. Cela dit, je l'ai fait référence et en utilisant un
StringBuilder code> ou un tableau code> char code> sera probablement plusieurs fois plus rapide (pour un nombre raisonnablement élevé). Un tableau CODE> conçu (CODE> tableau CODE> (construire un
String CODE> avec elle une fois que le tableau code> grinc code> est généré) va gagner sur un
StringBuilder code>, même si le
stringbuilder code> est construit avec une capacité initiale.
Il n'y a pas trop de symboles différents à remplacer, juste un simple remplacement serait facile.
Tout d'abord, 0123 serait interprété comme 123, le principal premier serait donc ignoré. Voici une solution possible:
int i = 1230468; StringBuilder res = new StringBuilder(i.ToString()); for (int j = 0; j < res.Length; j++) res[j] += (char)(17); // '0' is 48, 'A' is 65 Console.Out.WriteLine(res.ToString()); // result is BCDAEGI
Presque bien, mais me donne B au lieu d'un pour 1
Faites attention à cette instruction
output = (char)((char)'A' + (current - 1)) + output;
Vous ne pouvez pas avoir un int commençant par 0.
Un entier ne peut pas commencer par 0. Le premier angle sera supprimé afin de reconsidérer vos exigences.
OK vient de modifier la question. Désolé pour le premier zéro
L'arithmétique unicode simple ferait l'affaire ici.