Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 11 odgovora
  • 4.423 pregleda

Najnovija ↓

Frekvencija pojvljivanja karaktera 09.10.2008. u 17:28 · pre 219 meseci #1
Kako da u c# odradim sledeci problem:

Potrebno mi je da za svaki ASCII karatker (cela ASCII tabela) pronadjem broj pojavljivanja u nekom tekstu.
Da li ima neko elegantnije resenje od dve for petlje? odnosno da li neka alatka (textbox, reachtextbox...) ima mogucnosti za brojanje pojavljivanja karaktera?


hvala unapred
Re: Frekvencija pojvljivanja karaktera 09.10.2008. u 18:24 · pre 219 meseci #4
Šta će ti alatka za to, to se rešava jednom najprostijom petljom, manje od 10 linija čak i u C#-u. Evo ti rubi verzija pa prevodi, ili guglaj... ;)

>> def br_karaktera tekst
>> res = {}
>> tekst.split('').each{|c| res[c] = res[c] ? res[c] + 1 : 1}
>> res
>> end
>> br_karaktera 'riba ribi grize rep'
=> {" "=>3, "a"=>1, "b"=>2, "z"=>1, "p"=>1, "e"=>2, "g"=>1, "r"=>4, "i"=>4}
Re: Frekvencija pojvljivanja karaktera 09.10.2008. u 21:15 · pre 219 meseci #5
Citat:

... to se rešava jednom najprostijom petljom ...

Code:

    private const int arraySize = 256;

    public int Char2Ascii(char c)
    {
      return (int)c;
    }

    public char Ascii2Char(int i)
    {
      return (char)i;
    }

    public int[] NumOfChar(string text)
    {
      int[] numOfChar = new int[arraySize];

      for (int i = 0; i < text.Length; i++)
      {
        numOfChar[Char2Ascii(text[i])]++;
      }

      return numOfChar;
    }

    // i na primer upises u neki RichTextBox
    public void InsertTableIntoRichTextBox(string text)
    {
      int[] array = NumOfChar(text);

      for (int i = 0; i < array.Length; i++)
      {
        if (array[i] > 0)
        {
          this.myRichTextBox.AppendText(string.Format("{0} se pojavljuje {1} puta.\n", Ascii2Char(i), array[i]));
        }
      }
    }
Re: Frekvencija pojvljivanja karaktera 10.10.2008. u 01:56 · pre 219 meseci #7
Mislim da je jablan pre mislio na nesdsot slicno ovome:

Code:

            string tekst;
            Dictionary<char, int> dict = new Dictionary<char, int>(256);
            Console.Write("Tekst: "); tekst = Console.ReadLine();
            foreach (char c in tekst)
                if (dict.ContainsKey(c)) dict[c]++; 
                else dict.Add(c, 1);
            foreach (var hist in dict) Console.WriteLine("'{0}' se pojavljuje {1} puta", hist.Key, hist.Value);
            Console.ReadLine();
            return 0;
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: Frekvencija pojvljivanja karaktera 10.10.2008. u 16:53 · pre 219 meseci
izmenjeno 1 put, poslednji put bciric 10.10.2008. u 17:34
  1. bciric10.10.2008. u 17:34zapis iz teksta poruke
#8
e ovo je bas to sto mi treba, havla, ali ako moze jos jedna mala pomoc posto bas ne razumem ovo zadnje.

ja sam taj kod stavio u funkciju:
Code:

        private void BrojKaraktera(string tekst)
        {
            Dictionary<char, int> dict = new Dictionary<char, int>(256);
            foreach (char c in tekst)
                if (dict.ContainsKey(c)) dict[c]++;
                else dict.Add(c, 1);
            foreach (var hist in dict) Console.WriteLine("'{0}' se pojavljuje {1} puta", hist.Key, hist.Value);

        }


e ali bi rezultate smestio u ListView kontrolu, kako da ih izvucem? kako funkcionise ovo :Console.WriteLine("'{0}' se pojavljuje {1} puta", hist.Key, hist.Value);

i ne mogu da definisem hist tipa var, u cemu je problem?


hvala jos jednom
pozz
Re: Frekvencija pojvljivanja karaktera 10.10.2008. u 18:11 · pre 219 meseci #9
Sto bas ListView (nije bas zgodan za bindovanje)?

U svakom sluicaju mozes da promenis metod da umesto ispisa na konzolu transformise dictionary u List<string> listu koju onda mozes da bindujes gde god zelis:


Code:

        private List<string> BrojKaraktera(string tekst)
        {
            Dictionary<char, int> dict = new Dictionary<char, int>(256);
            foreach (char c in tekst)
                if (dict.ContainsKey(c)) dict[c]++;
                else dict.Add(c, 1);
            var list = from e in dict select string.Format("'{0}' se pojavljuje {1} puta", e.Key, e.Value);
            return list.ToList();
        }
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: Frekvencija pojvljivanja karaktera 10.10.2008. u 18:52 · pre 219 meseci #10
Code:

Console.Write("Enter text: ");
Char[] TextChars = Console.ReadLine().ToCharArray();
for (int i = 1; i < 256; i++) {
    int CharCount = 0;
    CharCount = TextChars.Count(c => (int)c == i);
    if (CharCount > 0)
        Console.WriteLine("'{0}' se pojavljuje {1} puta", ((char)i).ToString(), CharCount);
}
Console.ReadLine();


:)
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Re: Frekvencija pojvljivanja karaktera 10.10.2008. u 23:01 · pre 219 meseci #11
Hehe, a mozemo da iskombinujemo i lambdu i linq da dobijemo resenje bez counter varijabli i state niza gde ce linq da nam grupise i prebroji karaktere ;)

Code:
            Console.Write("Enter text: ");
            var samolinq = from c in Console.ReadLine()
                           group c by c into cgroup
                           orderby cgroup.Key
                           select new { c = cgroup.Key, cnt = cgroup.Count() };
            samolinq.ToList().ForEach(s => Console.WriteLine("'{0}' se pojavljuje {1} puta", s.c, s.cnt));
            Console.ReadLine();
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: Frekvencija pojvljivanja karaktera 13.10.2008. u 22:58 · pre 219 meseci #12
uuuuuuuuaaaaaaaaaaaaaauuuuuuuuuuuu

ovo zadnje jos nisam probao ali mi deluje kao da je to sto mi treba,

hvala svima na korisnim savetima. (jos se i rimuje :))
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme