2010-11-24 20 views
0

J'utilise .NET2.0
Je veux rechercher une chaîne pêle-mêle dans une liste de chaînesrecherche d'une chaîne pêle-mêle dans une liste de chaînes en C#

string[] wordList = new string[] { "java", "csharp", "fortran", "cobol", "pascal", "perl", "flash" }; 
string findText = "spclaa"; 

// do stuff 

Je veux résultat à « pascals " aussi si pas trouvé donner "désolé, pas trouvé"

Mise à jour:

  • ce n'est pas devoir
  • liste
  • est d'environ 1000 mots si ce ne est pas facile de trier chaque mot
+3

Si ce n'est pas des devoirs, je ne sais pas ce que c'est ... –

+0

Voulez-vous des correspondances partielles ou exactes? Qu'en est-il de la possibilité de répétitions? –

+0

Si vous cherchez des exemples sur comment fonctionnent les solveurs Scrabble, c'est fait de la même manière en utilisant une source de mots, en vérifiant la longueur, etc. –

Répondre

4

Eh bien, d'une façon serait:

  1. Créer une copie du tableau
  2. Trier chaque suite par ordre alphabétique
  3. Trier les termes de recherche par ordre alphabétique
  4. Rechercher l'index Si l'élément correspond au tableau copié correspondant au terme de recherche trié
  5. S'ils correspondent, renvoyez l'élément correspondant du tableau d'origine (non trié).
  6. S'ils ne correspondent pas, continuez la recherche.

Il est à noter qu'il est possible que deux mots aient le même contenu et ne soient pas égaux. Par exemple, "neo" et "one" ont des caractères identiques, mais ne sont clairement pas le même mot.

Mise à jour

Comme Paul a suggéré, cela fonctionnera mieux si vous avez seulement trier les chaînes qui ont le même nombre de caractères que le terme de recherche.

+0

Spookily similaire :) –

+0

J'ai une liste de 1000 mots, alors comment puis-je trier chaque chaîne. –

+1

De la même manière que vous triez une chaîne, seulement 1000 fois (en d'autres termes, pourquoi 1000 chaînes changent-elles quelque chose?) –

2

Smells comme les devoirs

Trier les personnages findText. Triez les caractères de chaque mot dans wordList et créez une nouvelle liste. Comparez le findText trié à chaque mot trié. Si vous obtenez une correspondance, recherchez le mot correspondant au même index dans le fichier wordList d'origine.

(vous pouvez probablement trier le mot de WordList juste avant le comparer)

EDIT: Si vous ne voulez vraiment pas de les trier,

comte combien de chaque lettre, il y a en findText .

  • Iterate par WORDLIST
  • Pour chaque mot,
    • si elle est la même longueur que WORDLIST
    • copier la table de fréquences pour FindText
    • itérer à travers le mot de liste de mots
    • Pour chaque caractère trouvé, décrémente le nombre dans la table de fréquence sinon zéro.
    • Si vous correspondez à toutes les lettres et retrouvez avec tous les zéros vous avez un match
1

Une méthode pourrait consister à trier les caractères dans chaque chaîne et la chaîne de comparaison et de les comparer de cette façon.

java becomes aajv 
csharp becomes achprs 
pascal becomes aaclps 
scplaa becomes aaclps 

Comparer les chaînes triées pour l'égalité et le retour non trouvé si aucune correspondance.

0

1.Filter la liste Array comme la longueur de la chaîne de recherche égale à l'élément de liste de tableau

2.compare chaque caractère dans l'élément de liste de tableau. Si vous avez trouvé le nombre d'incréments et supprimez cet élément de liste de tableaux de caractères.

nombre 3.En est égal à la recherche chaîne que l'élément de tableau d'impression élément sinon pas trouvé

0
  1. Liste des ces chaînes dont la longueur est égale à la longueur de chaîne donnée.
  2. À partir de ces listes filtrées, vérifiez la somme des valeurs ASCII de chaque chaîne avec la chaîne donnée. Troisième et dernier correspondent maintenant les caractères de la liste filtrée, vous obtiendrez la chaîne brouillée.