2010-09-19 9 views
1

Ok, voici ce que j'essaie de faire. L'utilisateur est invité à saisir un 8 chiffres (7 chiffres plus un trait d'unionC#: Diviser une chaîne (ou une entrée utilisateur) en caractères individuels avecOUT en utilisant un tableau?

781-0432

Je veux le briser et le stocker dans 8 variables char séparées sans utiliser un tableau:

a = 7 b = 8 c = 1 ... h = 2

Ive a essayé de le faire avec la méthode Console.Read():

a = Console.Read(); b = Console.Read(); etc

Le problème est, je ne sais pas comment entrer la Console.Read() pour arrêter la lecture après cela. Si le module est contenu dans une boucle, il ne semble pas réinitialisé lors de l'appel suivant.

Je sais ce que vous en pensez. Pourquoi diable n'utiliseriez-vous pas un tableau ou l'option split en char array? Eh bien, parce que c'est un devoir qui est très spécifique sur ce que vous voulez accomplir. C'est le premier à me noyer dans un moment. Un aperçu?

+0

pouvez-vous préciser ce que vous entendez par "Si le module est contenu dans une boucle, il ne semble pas réinitialisé lors de l'appel suivant"? –

+0

@kirk: C'est difficile à décrire. Lorsque vous utilisez Console.Read() pour la première fois, il vous invite à entrer l'entrée. À chaque utilisation ultérieure de la méthode Read(), il ne vous demandera pas tant qu'il reste des caractères dans l'invite d'origine qui n'ont pas encore été lus; donc à la place, il va juste lire le caractère suivant plutôt que de vous inviter à nouveau. Donc, si j'avais une sorte de déclaration de rupture qui jetterait une erreur si la 4ème position n'était pas un trait d'union '-', le programme me demanderait un nouveau numéro de téléphone et retournerait à essayer de le valider, MAIS au lieu de la méthode Read() commençant à la 1ère position – Sinaesthetic

+0

n, elle commencerait à la 5ème position car elle n'était pas terminée avec l'entrée d'origine, indépendamment du fait qu'elle a maintenant une nouvelle entrée. c'est vraiment désordre – Sinaesthetic

Répondre

3

C'est déjà un tableau (enfin, en quelque sorte *)!

Vous pouvez accéder à chaque caractère individuel en utilisant un indexeur sur la chaîne. Par exemple:

string str = "781-0432"; // To take input, you can use Console.ReadLine() 
char firstChar = str[0]; 
char secondChar = str[1]; 
// etc 

* Techniquement, un string est pas un tableau, mais il a un indexeur personnalisé qui lui permet d'être utilisé comme un char[].

+0

j'ai décidé d'aller avec celui-ci merci! Cela a fonctionné. Le produit fini le morceau le plus alambiqué de la poubelle jamais, mais il suit les directives si im contenu :) – Sinaesthetic

+3

@Sinaesthetic si vous avez aimé cette réponse, vous devez marquer votre question comme réponse en cliquant sur la coche. – ahsteele

+2

Marquer les réponses est un excellent moyen d'encourager la communauté. –

1
public char ReadChar() 
{ 
    char r = ' '; 
    while (r < '0' || r > '9') 
     r = Console.ReadKey(); 
    return r; 
} 

a = ReadChar(); 
b = ReadChar(); 
//... 
0

Qu'en est-il du stockage de vos caractères dans un POCO que vous pourrez récupérer plus tard?

public void SomeEvent() 
{ 
    string PhoneNumber = "781-0432" 
    Alphabet alphabet = SplitNumber(PhoneNumber); 
    // Pass the alphabet object around and maintain the individual characters! 
} 

public Alphabet SplitNumber(string number) 
{ 
    Alphabet alphabet = new Alphabet(); 
    alphabet.a = number[0]; 
    alphabet.b = number[1]; 
    alphabet.c = number[2]; 
    alphabet.d = number[3]; 
    alphabet.e = number[4]; 
    alphabet.f = number[5]; 
    alphabet.g = number[6]; 
    alphabet.h = number[7]; 
    return alphabet; 
} 

class Alphabet 
{ 
    public string a; 
    public string b; 
    public string c; 
    public string d; 
    public string e; 
    public string f; 
    public string g; 
    public string h; 
} 

Maintenant, vous pouvez déplacer Alphabet autour de votre application et maintenir les caractères individuels.

+0

Sournois, mais horrible. –

+0

J'ai utilisé le convertisseur telerik pour convertir à partir de VB. Désolé si c'est un peu éteint. –

+0

si c'est toujours ces 8 caractères, alors cela fonctionne très bien. Je suis plus préoccupé par la possibilité de simplement l'enregistrer comme un objet de classe qui peut être utilisé plus tard. –

Questions connexes