2 votes

Lettres séquentielles en C#

Je veux générer des lettres séquentielles en C#.

Par exemple, la première valeur d'une variable sera "a", suivie de "b", "c", ... Après "z", la plage se poursuivrait avec "aa", "bb", ...

Quelque chose comme

i=0;
while(i<40)
{
   Console.WriteLine(i);
   i++;
}

mais en utilisant des lettres.

6voto

Florian Greinacher Points 6769

Vous pouvez incrémenter un caractère comme vous pouvez incrémenter un nombre entier.

char c = 'a';

while(c <= 'z')
{
     // Do something with c
     c++;
}

3voto

cHao Points 42294

Note, je viens juste de préparer ça. Je ne l'ai pas encore essayé.

for (int i=0; i<40; ++i)
{
    char digit = (char) (97 + i%26);  // utf/ascii code 97 == 'a'
    Console.WriteLine(new String(digit, i/26 + 1));
}

El String(char c, int n) Le constructeur vous renvoie une chaîne de caractères avec le caractère c répété n fois. À partir de là, tout ce dont vous avez besoin est de savoir ce qui doit être répété ('a' pour 0, 26, 52, etc.), et combien de fois le répéter (1 pour 0, 2 pour 26, 3 pour 52, etc.).

A noter également, i peut être n'importe quoi (enfin, n'importe quel nombre positif). J'ai juste bouclé de 0 à 40 comme vous le faisiez. Vous n'avez pas besoin de travailler jusqu'à cette valeur ou de stocker des résultats intermédiaires.

1voto

cost Points 1968

Puisque vous avez ajouté une nouvelle étiquette de devoir, je ne vais pas vous donner la réponse directe, mais je vais vous donner un point dans la bonne direction. Comme Florian Greinacher l'a dit, vous pouvez "compter" les caractères ascii comme vous le feriez pour des nombres (en fait, je pense que c'est possible, mais je ne l'ai jamais fait en C#. Le typage fort le permet-il ?).

Suivez les conseils de Florian, mais gardez une trace du nombre de fois où vous avez terminé la boucle a-z, et imprimez plus de copies de ce dont vous avez besoin à travers plus d'itérations.

Avez-vous besoin d'imprimer des choses comme "ab" et "ba", ou simplement "aa" "aaa", etc ?

0voto

Pepe Points 3506

Un pseudo-code :

Declare a base string
Inialize base string to ""
for each letter in alphabet
    print base_string + letter
    if(letter == last letter)
       base_string = base_string + letter
       letter = first letter

next letter

0voto

WEFX Points 2942

Je déclare un tableau de 26 caractères, où [0] = a, [1] = b, etc. Ensuite, pour un entier donné, je divise par 26, et je stocke les valeurs du quotient et du mod comme variables. La réponse sera l'élément à la position (mod-1), imprimé (quotient + 1) fois. Le code ci-dessous n'est pas parfait ; vous devrez probablement utiliser un cast pour que les ints jouent correctement. De plus, j'utilise le nombre 92 pour les besoins de cet exemple, mais vous pouvez utiliser n'importe quel (nombre)...

string[] letters = {'a', 'b', ... };
int number = 92;
int quotient = number / 26; // answer is 3
int mod = number % 26; // answer is 14
string answer = "";

for (int i = 0; i <= quotient; i ++) {
    answer += letters[mod - 1];
}

return answer;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X