0
votes

Sélectionnez des lettres hors texte et mettez-les dans une liste

La tâche est donc que je dois coder un programme permettant à l'utilisateur d'entrer du texte. Après cela, je dois filtrer le texte des lettres non-majuses et les mettre dans une liste. Chaque lettre ne devrait être que dans la liste une fois. Le problème de mon code est que lorsque j'entre un mot comme "Même", la méthode choisit E et V, mais la méthode ne saute pas la seconde "E" et finit là-bas.

for (int i = 0; i < text.Length; i++)
{
    if (letters.Contains(text[i]) == false && (text[i] >= 'a' && text[i] <= 'z'))
    {
        letters.Add(text[i]);
        Console.WriteLine($"{letters[i]}");
    }
}


2 commentaires

Je pense que l'exception est causée par cette ligne: console.writeline ($ "{lettres [i]}"); pouvez-vous le remplacer par console.writeline ($ "{texte [i]} "); ?


Votre tentative d'accès d'index qui n'est pas disponible dans les lettres de cette console.writeline ($ "{lettres [i]}")


5 Réponses :


1
votes

La cause de indexoutofrangeException code> se situe dans les lignes suivantes.

Console.WriteLine($"{text[i]}");


2 commentaires

Même mieux texte [i] devrait être la dernière lettre.


@JuHarr Oui. Mais pensait qu'il était préférable de diriger OP dans la recherche du dernier personnage ajouté à la liste, même si les deux sont identiques. Pensait que cela aiderait à souligner l'erreur de manière meilleure.



4
votes

Il semble que l'exception soit causée par cette ligne: xxx

pouvez-vous remplacer par xxx

ou vous pouvez utiliser A foreach et un autre appelant de variable lettre : xxx


0 commentaires

0
votes

Char code> Classe a déjà des extensions qui vérifient les caractères, vous pouvez utiliser char.isletter (caractère) code> et char.Islower (caractère) code> obtenir des lettres minuscules uniquement.

Voici un exemple de votre code: P>

string input = "Even if I'm a string, I still like odd numbers like 1, 3, 5 ..etc.";

var text = input.ToCharArray();

List<char> letters = new List<char>();

for(int x =0; x < text.Length; x++)
{
    if (char.IsLetter(text[x]) && char.IsLower(text[x]) && !letters.Contains(text[x]))
    {
        letters.Add(text[x]);
        Console.WriteLine($"{text[x]}");
    }

}


0 commentaires

0
votes

Il y a peu de choses qui pourraient vous aider ici:

  1. hashset li>
  2. Char.Suletter Li> ol>

    Exemple court: P>

    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    namespace ConsoleApp1
    {
        class Program
        {
            static void Main(string[] args)
            {
                string text = "evEn There";
    
                // HashSet is like a list, but without duplicates
                HashSet<char> characters = new HashSet<char>();
    
                // First make all characters lower case
                text = text.ToLower();
    
                foreach (char c in text)
                {
                    if (Char.IsLetter(c))
                    {
                        // This will add the character ONLY if it is not there, if not it returns false
                        bool couldBeInserted = characters.Add(c);
                    }
                }
    
                string allCharacters = new String(characters.ToArray());
    
                //This will print: "evnthr"
                Console.WriteLine(allCharacters);
    
            }
        }
    }
    


1 commentaires

@Noots, peut-être que vous le savez déjà, dans ce cas le rejeter :): En général, si possible, vous devriez essayer d'éviter d'utiliser l'index car ces types d'erreurs peuvent se produire. C'est la raison pour laquelle il est préférable d'utiliser des produits lorsque cela est possible



0
votes

Vous pouvez le faire facilement avec Linq où code> méthode et tohashset code> méthode pour des éléments uniques dans la matrice:

Console.WriteLine($"{text[i]}");


0 commentaires