Trouver Nième occurrence d'un caractère dans une chaîne
J'ai besoin d'aide avec la création d'un C# méthode qui retourne l'indice de la n-ième occurrence d'un caractère dans une chaîne.
Par exemple, la 3ème occurrence du caractère 't'
dans la chaîne "dtststxtu"
est 5.
(Notez que la chaîne a 4 t
s.)
- Qu'avez-vous jusqu'à présent?
- J'ai édité votre réponse à plus de transmettre clairement ce que vous voulez. J'espère que vous obtiendrez des réponses adaptées à la question. Ne pas parler couramment l'anglais n'est pas un problème de Débordement de Pile, vous pouvez toujours ajouter une ligne pour demander à quelqu'un plus à l'aise à l'édition de votre question et de la nettoyer, mais vous devez vous efforcer de donner quelques exemples dans la question, de sorte que les gens comprennent ce dont vous avez besoin.
Vous devez vous connecter pour publier un commentaire.
Qui pourrait être fait beaucoup plus propre, et il y a pas de vérification sur l'entrée.
Il y a un petit bug dans la solution précédente.
Voici le code à jour:
Mise à jour: Indice de la Nième occurrence d'un seul-liner:
Les utiliser à vos propres risques. Cela ressemble à des devoirs, alors je l'ai laissé quelques bugs dans votre trouver:
.
.
Voici un autre LINQ solution:
Juste pour le fun, voici une Regex solution. J'ai vu certaines personnes initialement utilisé les Regex pour compter, mais quand la question a changé pas de mises à jour ont été faites. Voici comment on peut le faire avec les Regex encore une fois, juste pour le plaisir. L'approche traditionnelle est préférable pour des raisons de simplicité.
Ici est un appel récursif à la mise en œuvre, comme une extension de la méthode, mimicing le format de la méthode du cadre(s):
Aussi, voici quelques (MBUnit) tests unitaires qui pourrait vous aider (pour prouver qu'il est correct):
ranomore correctement commenté que Joel Coehoorn du one-liner qui ne fonctionne pas.
Ici est une de deux-liner que ne travail, une chaîne d'extension de la méthode qui retourne l'index basée sur 0 de la n-ième occurrence d'un caractère, ou -1 si aucun n-ième occurrence existe:
Joël la réponse est bonne (et je upvoted il). Voici une LINQ solution basée sur:
Where
et en passant le prédicat de laCount
méthode. Il n'y a rien de mal avec la façon dont il est.Ici est une façon amusante de faire
- Je ajouter une autre réponse que courir assez vite par rapport à d'autres méthodes
vous pouvez faire ce travail avec des Expressions Régulières.
meilleurs égard.
si vous êtes intéressé, vous pouvez également créer des chaînes les méthodes d'extension de la sorte:
Une autre expression régulière à base de solution (non testé):
Ce doit être un peu plus optimale que d'exiger des RegEx pour créer un ensemble de Correspondances, seulement à se défausser de toutes, mais un match.
match.Success
et obtenir leNextMatch
tandis que l'incrémentation d'un compteur et de briser plus tôt, lorsque lecounter == index
.Salut à tous, j'ai créé deux surcharge des méthodes pour trouver de la n-ième occurrence de char et pour texte avec moins de complexité sans avoir à naviguer à travers la boucle ,ce qui augmente les performances de votre application.
Depuis le haut-
IndexOf
fonction est déjà optimisé pour la recherche d'un caractère dans une chaîne, d'un même version plus rapide serait (comme la méthode d'extension):Ou à la recherche de la fin de la chaîne à l'aide de
LastIndexOf
:La recherche d'une chaîne au lieu d'un personnage est aussi simple que de changer le type de paramètre à partir de
char
àstring
et éventuellement ajouter une surcharge de spécifier leStringComparison
.Marc Cal' LINQ Étendu pour les génériques.
Certains tests.
}
En voici un autre, peut-être plus simple de mise en œuvre de la chaîne de
IndexOfNth()
avec les chaînes de mise en œuvre.Voici la
string
correspond à la version:et la
char
correspond à la version:Je pense que pour un faible niveau de mise en œuvre que vous voulez rester à l'écart de l'utilisation de LINQ, RegEx ou la récursivité pour réduire les frais généraux.