Avatar billede Kabue Nybegynder
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.
Avatar billede Syska Mester
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;
}
Avatar billede arne_v Ekspert
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();
        }
    }
}
Avatar billede arne_v Ekspert
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.
Avatar billede arne_v Ekspert
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();
        }
    }
}
Avatar billede arne_v Ekspert
12. januar 2012 - 22:12 #5
kabue??
Avatar billede Kabue Nybegynder
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;
         
        }

    }
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester