0
votes

Comment supprimer une partie particulière d'une chaîne en C # en fonction de la saisie de l'utilisateur?

Alors, j'essaie de m'enseigner moi # et je fais donc des exercices. Dans cet exercice, je suis censé créer un programme qui produit une phrase, l'utilisateur donne une entrée sur quel mot ils veulent être supprimés de cette phrase. La phrase est ensuite imprimée sans ce mot.

        string text = "Quick brown fox jumps over the lazy dog";
        Console.WriteLine(text);

        Console.Write("Which word would you like to remove? ");
        string userinput = Console.ReadLine();
        string newText = text.Replace(userinput, "");

        Console.WriteLine(newText);
        Console.ReadLine();


1 commentaires

Vous pouvez stocker les mots dans une liste list , puis supprimez le mot de la liste ou vous pouvez "marcher" la chaîne de caractères-caractères et supprimer des mots comme vous les trouvez.


4 Réponses :


0
votes

Vous pouvez utiliser la méthode .indexOf pour obtenir l'index zéro basé sur la première occurrence de la chaîne de remplacement. Ensuite, en utilisant ces informations et la longueur de la chaîne de remplacement, vous pouvez vérifier les espaces de début ou de fin et décidez si vous souhaitez supprimer un ou les deux.


0 commentaires

1
votes

Si vous enseignez-vous à programme , vous souhaitez probablement éviter d'utiliser les méthodes intégrées telles que remplacer ou indexof ou contient . Sinon, si vous vous penchez simplement une nouvelle langue, il n'y a pas de problème avec le code que vous utilisez, sauf pour vérifier si le mot que vous avez supprimé est suivi d'un espace.

Un moyen de faire ce que vous voulez Sans utiliser des méthodes intégrées consiste simplement à "marcher" à travers la chaîne d'une boucle, capturer chaque caractère dans une variable "mot" temporaire. Lorsque vous arrivez à un caractère d'espace, alors si le mot que vous avez capturé n'est pas celui à supprimer, ajoutez-le à une chaîne de résultat. Si cela est le mot à supprimer, ignorez-le et continuez. À la fin, vous aurez tous les mots, à l'exception de celui qui devait être supprimé.

J'ai ajouté des commentaires au code d'exemple ci-dessous pour mieux illustrer ce que je veux dire: < Pré> xxx

Exemple d'utilisation: xxx


3 commentaires

C'est très bon mais un peu inefficace, car chaque fois que vous faites string + = antherstring Vous copiez la chaîne de trou dans la RAM. C'est négligeable dans de petites cordes, mais cela peut être une douleur avec de grandes chaînes. Je suggère d'utiliser StringBuilder ou même Liste (entrée.length) avec un seul String.join à la fin.


Votre réponse utilise string + = char mais je crois que cela fonctionne de la même manière sous la hotte.


@Guilherme Oui, merci. Je suis au courant de cela, mais cela ressemble à d'essayer d'apprendre de la programmation pour que je commençais avec quelque chose de simple. Certainement, il y a des moyens plus efficaces de faire cela.



2
votes

Vous pouvez toujours diviser le texte avec String.Split, qui renvoie un tableau ... pour être rejoint sur un espace plus tard. Il serait peut-être agréable de vérifier si le texte contient réellement le UserInput ... alors vous pouvez dire que quelque chose comme "Impossible de trouver que tu ne trouves pas que Ya Dingus tapez un vrai mot!"

newText = newText.Replace("  ", " ");


0 commentaires

0
votes

Votre algorithme est okey mais vous pouvez mon algorithme, essayez des étapes

  1. UserInput Split par l'espace '' puis Tolist et Stocker dans Munwords List
    1. Recherchez Supprimer Word et Supprimer Word, utilisez la condition foreach and Set si correspondant Word Supprimer le mot par MyWords.Reomve (article);
    2. Après la liste Inscrivez-vous, utilisez String.join ("", Munwords); ** Vous comprenez ou avez besoin de code pour plus de détails? **

0 commentaires