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]}");
}
}
5 Réponses :
La cause de indexoutofrangeException code> se situe dans les lignes suivantes. Console.WriteLine($"{text[i]}");
Même mieux texte [i] code> 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.
Il semble que l'exception soit causée par cette ligne: pouvez-vous remplacer par p> ou vous pouvez utiliser A foreach code> et un autre appelant de variable lettre code>: p>
Voici un exemple de votre code: P> 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. 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]}");
}
}
Il y a peu de choses qui pourraient vous aider ici:
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);
}
}
}
@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
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]}");
Je pense que l'exception est causée par cette ligne:
console.writeline ($ "{lettres [i]}"); code> pouvez-vous le remplacer parconsole.writeline ($ "{texte [i]} "); code>?Votre tentative d'accès d'index qui n'est pas disponible dans les lettres de cette
console.writeline ($ "{lettres [i]}") code>