Kezdőoldal » Számítástechnika » Programozás » Valaki írna nekem egy programo...

Valaki írna nekem egy programot (C# vagy Visual Basic), ami megszámolja, hogy egy névben mennyi van az egyes betűkből?

Figyelt kérdés

Pl.:

Pl.:

Kiss Géza

K – 1 db

I – 1 db

S – 2 db

G – 1 db

Stb…


2011. máj. 24. 09:54
 1/6 A kérdező kommentje:
Vagy legalább valami tippet, amin el lehet indulni.
2011. máj. 24. 10:11
 2/6 anonim ***** válasza:

a visual csodákhoz nem értek, de az algoritmus olyasmi lenne, hogy egy while-al végiglépkedünk a névek karakterenként, és egy char tömbbe kigyűjtjük a benne szereplő karaktereket, valamint egy int tömbbe, hogy mennyi van belőle. Ehhez kell még egy belső while ciklus, ami megnézi, hogy van-e már az adott karakter a tömbben. Ha nincs, akkor beírja a tömb utolsó helyére, és a számlálókat tartalmazó tömb megfelelő helyére 1-et ír, ha már van, akkor hozzáad 1-et a megfelelő elemhez.

Lehet 1 közös tömb is, amelynek az elemei struct-ok, amely egyik tagja egy char, a másik egy int a számlálónak.

Tehát miközben végiglépkedünk a néven, kigyűjtjük a karaktereket egyenként a tömbbe, miközben vizsgáljuk, hogy van-e már a tömbben az a karakter. Addig lépkedünk a néven, amíg vége nem lesz, ami például a string vége, ha stringekben vannak a nevek, vagy egy új sor karakter, ha egy file-ban vannak soronként.

2011. máj. 24. 10:44
Hasznos számodra ez a válasz?
 3/6 anonim ***** válasza:
vagy lehet a tömb ABC méretű, ami harmincvalahány karakter, ekkor csak a számlálót kell növelgetni.
2011. máj. 24. 10:46
Hasznos számodra ez a válasz?
 4/6 anonim ***** válasza:

Előző válaszóló logikája jó, de ez nem C#-os megoldás, mivel itt már nem használunk ilyenekre tömböt. Én a Dictionary-t használnám ehhez, ahol a karakter a kulcs, az értéke pedig, hogy hányszor szerepel


string input = "Kiss Zoltán".ToLower();

/* input változóban van a keresendő szöveg, ha nem akarjuk a kis-és nagybetűket megkülönböztetni, akkor ToLower, vagy ToUpper kell*/

Dictionary<char, int> words = new Dictionary<char, int>();

foreach (char c in input)

{/*végigmegyünk a stringen*/

if (words.Keys.Contains(c))

{

words[c]++;/*Ha már volt ilyen karakter, akkor csak a számot növeljük egyel*/

}

else

{

words.Add(c, 1);/*Ha még nem volt ilyen karakter, akkor hozzáadjuk a dictionaryhoz 1-értékkel*/

}

}

/*Egy példa a végeredmény kiiratására*/

foreach (var item in words)

{

Console.WriteLine(item.Key + ": " + item.Value);

}


Remélem jó lesz

2011. máj. 24. 13:00
Hasznos számodra ez a válasz?
 5/6 anonim ***** válasza:

Az előző válaszoló kódja rövidebben (gyakorlatilag 1 sor a megoldás, a többi csak sallang):

string input = "Kiss Zoltán".ToLower();

var words = input.GroupBy(c => c).ToDictionary(c=>c.Key, c=>c.Count());

/*Egy példa a végeredmény kiiratására*/

foreach (var item in words)

{

Console.WriteLine(item.Key + ": " + item.Value);

}

Console.ReadLine();

2011. máj. 25. 23:23
Hasznos számodra ez a válasz?
 6/6 anonim válasza:

én az elejét úgy csinálnám, hogy a program indítása után írsz egy nevet és annak írja ki a betűit:


Console.Write("Név : ");

string input = Console.ReadLine();

input=input.ToLower();


a többi része meg ugyanaz mint az előttem íróké :)

2011. dec. 17. 18:54
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!