06. december 2011 - 23:49
Der er
5 kommentarer og 1 løsning
Ord, med blandede bogstaver?
Hey Jeg skal bruge et program der kan søge efter ord i en ord liste, og finde dem lige meget hvilken rækkefølge jeg taster bogstaverne ind i søgefeltet. Så hvis jeg f.eks. søger kspeeentr vil den kunne finde ordet "Eksperten" fordi alle bogstaver passer sammen. Hvis der allerede findes sådan et program ville jeg super gerne have det, og hvis ikke, så må jeg vel selv lave det.
Annonceindlæg fra Computerworld
07. december 2011 - 00:13
#1
Pas ... men super lille program: Her er en lille test: [Test] public void should_be_able_to_match_eksperten_on_kspeeentr() { char[] chars = "kspeeentr".ToCharArray(); var list = new List<string>() { "kspeeentr", "Eksperten", "mikael", }; var value = GetValue(chars, list); value.Should().BeTrue(); } [Test] public void should_be_able_to_match_mikael_on_leakim() { char[] chars1 = "leakim".ToCharArray(); char[] chars2 = "leakims".ToCharArray(); var list = new List<string>() { "mikael", "kspeeentr", "Eksperten", }; GetValue(chars1, list).Should().BeTrue(); GetValue(chars2, list).Should().BeFalse(); } private static bool GetValue(char[] chars, List<string> list) { foreach (var word in list) { var tempWord = word.ToLower(); // var charWord = word.ToCharArray(); foreach (var c in chars) { var indexOf = tempWord.IndexOf(char.ToLower(c)); if (indexOf == -1) return false; tempWord = tempWord.Remove(indexOf, 1); } if (tempWord.Length == 0) return true; } return false; }
07. december 2011 - 01:41
#2
Anden loesning: using System; using System.Collections.Generic; using System.Linq; namespace E { public static class MyExtensions { public static string Sort(this string s) { return new string(s.ToCharArray().OrderBy(c => c).ToArray()); } public static bool SpecialContains(this List<string> lst, string t) { return lst.ConvertAll(s => s.Sort()).Contains(t.Sort()); } } public class Program { public static void Main(string[] args) { List<string> wordlist = new List<string>{ "ekseprten", "giraf" }; Console.WriteLine(wordlist.SpecialContains("eksperten")); Console.WriteLine(wordlist.SpecialContains("kspeeentr")); Console.WriteLine(wordlist.SpecialContains("abc")); Console.WriteLine(wordlist.SpecialContains("giraf")); Console.WriteLine(wordlist.SpecialContains("farig")); Console.WriteLine(wordlist.SpecialContains("xyz")); Console.ReadKey(); } } }
07. december 2011 - 01:43
#3
using System; using System.Collections.Generic; using System.Linq; namespace E { public static class MyExtensions { public static string Sort(this string s) { return new string(s.ToCharArray().OrderBy(c => c).ToArray()); } public static bool SpecialContains(this List<string> lst, string t) { return lst.Contains(t.Sort()); } } public class Program { public static void Main(string[] args) { List<string> wordlist = new List<string>{ "ekseprten", "giraf" }; wordlist = wordlist.ConvertAll(s => s.Sort()); Console.WriteLine(wordlist.SpecialContains("eksperten")); Console.WriteLine(wordlist.SpecialContains("kspeeentr")); Console.WriteLine(wordlist.SpecialContains("abc")); Console.WriteLine(wordlist.SpecialContains("giraf")); Console.WriteLine(wordlist.SpecialContains("farig")); Console.WriteLine(wordlist.SpecialContains("xyz")); Console.ReadKey(); } } } er naturligvis mere efektivt men har ikke helt den samme magi over sig.
07. december 2011 - 01:45
#4
Maaske: using System; using System.Collections.Generic; using System.Linq; namespace E { public static class MyExtensions { public static string Sort(this string s) { return new string(s.ToCharArray().OrderBy(c => c).ToArray()); } public static bool SpecialContains(this List<string> lst, string t) { return lst.Contains(t.Sort()); } public static List<string> Prep(this List<string> lst) { return lst.ConvertAll(s => s.Sort()); } } public class Program { public static void Main(string[] args) { List<string> wordlist = new List<string>{ "ekseprten", "giraf" }; wordlist = wordlist.Prep(); Console.WriteLine(wordlist.SpecialContains("eksperten")); Console.WriteLine(wordlist.SpecialContains("kspeeentr")); Console.WriteLine(wordlist.SpecialContains("abc")); Console.WriteLine(wordlist.SpecialContains("giraf")); Console.WriteLine(wordlist.SpecialContains("farig")); Console.WriteLine(wordlist.SpecialContains("xyz")); Console.ReadKey(); } } }
12. januar 2012 - 22:12
#5
kabue??
12. januar 2012 - 22:52
#6
Hey undskyld jeg har været så inaktiv ^_^. Er totalt nybegynder til programmering i C#, så faktisk lidt meningsløst at spørge om hjælp, for forstod alligevel ikke hvad i skrev for at hjælpe. Men har lært lidt mere nu, så tusind tak for jeres indlæg. Jeg fik dog selv lavet programmet, så den er jo fjong for mig. Det endelige resultat blev: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string input = textBox1.Text; char[] bogstaver = input.ToArray(); string[] target = richTextBox1.Text.Split(' '); List<string> rigtigOrd = new List<string>(); foreach (string ord in target) { bool isMatch = true; foreach (char bogstav in bogstaver) { if (!ord.Contains(bogstav)) { isMatch = false; break; } } if (isMatch) { rigtigOrd.Add(ord); } } if (rigtigOrd.Count > 0) MessageBox.Show("Der er fundet " + rigtigOrd.Count + "rigtige ord" + WriteWords(rigtigOrd)); else { MessageBox.Show("Der var ingen rigtige ord"); } } private string WriteWords(List<string> alleOrd) { string result = Environment.NewLine; foreach (string ord in alleOrd) { result = result + ord + Environment.NewLine; } return result; } } }
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.