Avatar billede flyver23 Nybegynder
28. november 2006 - 20:23 Der er 3 kommentarer og
1 løsning

Finde det ord som er repræsenteret flest gange i en string

Hej Eksperter.
Sidder og roder med en lille opgave hvor jeg skal analysere en tekst streng (string) på mange forskellige måder. Den sidste som jeg ikke kan knække er at man skal finde det ord, som er nævnt flest gange i en strøm af ord. eks. "Jeg hedder søren og jeg kan lide at gå tur" her skal svaret være "jeg"
jeg har følgende kode som opdeler strengen i ord, men kan så ikke lige komme videre.. Nogen der har gode ideer?

public string HyppigsteOrd(string input)
        {
            string hyppigste = "";
            int højesteAntal = 0;
            string[] splitTegn = { ",", ".", " ", "\r", "\n" };
            string[] ord = new string[input.Length];
            ord = input.Split(splitTegn, StringSplitOptions.RemoveEmptyEntries);

            return hyppigste;
        }

Venlig hilsen
Flyver23
Avatar billede lifo Nybegynder
29. november 2006 - 00:02 #1
det må da være noget i denne stil

public string HyppigsteOrd(string input)
    {
        string hyppigste = "";
        int højesteAntal = 0;
        string[] splitTegn = { ",", ".", " ", "\r", "\n" };
        string[] ord = new string[input.Length];
        ord = input.Split(splitTegn, StringSplitOptions.RemoveEmptyEntries);

        Dictionary<string, int> ordCount = new Dictionary<string, int>();

        foreach (string st in ord)
        {
            if (ordCount.ContainsKey(st))
            {
                ordCount[st] += 1;
            }
            else
            {
                ordCount.Add(st, 1);
            }
           
            // ckeck om dette ord er højst
            if (ordCount[st] > højesteAntal)
            {
                højesteAntal = ordCount[st];
                hyppigste = st;
            }
        }
        return hyppigste;
    }
Avatar billede arne_v Ekspert
29. november 2006 - 01:16 #2
jeg lavede engang noget kode til en lignende opgave som her er konverteret til .NET 2.0:

using System;
using System.Collections.Generic;

public class WordCount : IComparable
{
    string word;
    int count;
    public WordCount(string word)
    {
        this.word = word;
        this.count = 1;
    }
    public string Word
    {
        get
        {
            return word;
        }
    }
    public int Count
    {
        get
        {
            return count;
        }
    }
    public void Increment()
    {
        count++;
    }
    public int CompareTo(object o)
    {
        return ((WordCount)o).Count - count;
    }
}

public class WordCountList
{
    private Dictionary<string,WordCount> list;
    private int minlen;
    public WordCountList(int minlen)
    {
        this.list = new Dictionary<string,WordCount>();
        this.minlen = minlen;
    }
    public void AddWord(string word)
    {
        if(word.Length >= minlen)
        {
            if(list.ContainsKey(word))
            {
                list[word].Increment();
            }
            else
            {
                list.Add(word, new WordCount(word));
            }
        }
    }
    public void AddText(string text)
    {
        string[] words = text.Split(" ".ToCharArray());
        for(int i = 0; i < words.Length; i++)
        {
            AddWord(words[i]);
        }
    }
    public ICollection<WordCount> GetTop(int n)
    {
        List<WordCount> temp = new List<WordCount>();
        temp.AddRange(list.Values);
        temp.Sort();
        temp.RemoveRange(n, temp.Count - n);
        return temp;
    }
}

public class TestClass
{
    public static void Test(string s)
    {
        WordCountList proc = new WordCountList(1);
        proc.AddText(s);
        ICollection<WordCount> top = proc.GetTop(3);
        foreach(WordCount wc in top)
        {
            Console.WriteLine(wc.Word + " : " + wc.Count);
        }
    }
    public static void Main(string[] args)
    {
        Test(@"Dette er en lille test - er en en");
        Console.ReadLine();
    }
}
Avatar billede flyver23 Nybegynder
29. november 2006 - 08:52 #3
Tak for hjælpen. Lifo´s svar var det nemmeste at anvende, og opfylder mine behov.
Så fik jeg også lært lidt om Dictionary. Dejligt. ;-)
Smid et svar.
Vh Flyver23
Avatar billede lifo Nybegynder
29. november 2006 - 19:19 #4
svar :-)
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