7
votes

Quelle est la meilleure façon de convertir un numéro à une chaîne d'alphabet?

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, xxx

je veux que cela soit converti à une chaîne qui serait xxx

ceci Les moyens 1 représente un, 2 représente b et ainsi de suite.


4 commentaires

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.


6 Réponses :


-1
votes

faire un tableau de caractères: xxx

puis utilisez le numéro du chiffre comme indice de la matrice: xxx

base est le Un code de caractère

Ceci est un pseudo code et je n'ai pas testé le!

Il devrait fonctionner ...


3 commentaires

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 ...



-2
votes

Utilisez Dictionnaire classe, regardez cela.


2 commentaires

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



8
votes

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);


9 commentaires

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 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 ne sera pas assez grand pour que cela soit que horrifié. Cela dit, je l'ai fait référence et en utilisant un StringBuilder ou un tableau char sera probablement plusieurs fois plus rapide (pour un nombre raisonnablement élevé). Un tableau conçu (CODE> tableau (construire un String avec elle une fois que le tableau grinc est généré) va gagner sur un StringBuilder , même si le stringbuilder est construit avec une capacité initiale.



0
votes

Il n'y a pas trop de symboles différents à remplacer, juste un simple remplacement serait facile. XXX


0 commentaires

2
votes

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


1 commentaires

Presque bien, mais me donne B au lieu d'un pour 1



0
votes

Faites attention à cette instruction

output = (char)((char)'A' + (current - 1)) + output;


0 commentaires