Misafir
Soru:
Kullanıcı tarafından girilen bir kelimenin içinde bulunan harflerden kaç tane varsa onu bize bildirecek program
Kullanıcı tarafından girilen bir kelimenin içinde bulunan harflerden kaç tane varsa onu bize bildirecek program
Akış
bende böyle düşünmüşdüm fakat çok uraştırıcı. kesin bir kısa yolu vardır diye düşünüyorum. ama yinede bunu yapayım.__kadıköyRAP__ dedi: ↑bi fikir vereyim
bi döngü kuracaksın, önce a harfine bakacaksın, hepsini sayıp a'dan kaç tane var yazdırıcaksın, sonra sıra döngüde b'ye gelecek onu da sayıp yazdıracaksın böyle böyle tüm harfleri saydırıp yazdıracaksın
sağol düşünmen yeterli :)mcht_z dedi: ↑namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
label1.Text = textBox1.TextLength.ToString();
}
}
}
Ben karakter sayısını sorduğunu sanmıştım bir an dalgınlıkla :) Bu kod işini görmez.
foreach (var karakter in (from k in "ddddabbccc".ToCharArray()
group k by k into grup
orderby grup.Key
select new { KarakterAdı = grup.Key, KarakterSayısı = grup.Count() }).ToArray())
{
Console.WriteLine(karakter.KarakterAdı + " karakterinden " + karakter.KarakterSayısı + " adet bulundu.");
};
Console.ReadLine();
int hashtablo[29];
for(int i =0 ; i< strlen(cumle); i++) {
char harf = cumle[i];
int harfindex = harf -65; // Turkce karakterler icin bu sekilde index bulamazsin ama ingilzice karakterler icin 65 ten baslayabilirsin
hashtable[harfindex] ++; //bu karakterin degerini bir artiriyoruz.
}
dostum tüm harfleri vermior. sadece 1 harfi veriyor.totleben dedi: ↑Bak bakalım böyle oluyor mu?foreach (var karakter in (from k in "ddddabbccc".ToCharArray() group k by k into grup orderby grup.Key select new { KarakterAdı = grup.Key, KarakterSayısı = grup.Count() }).ToArray()) { Console.WriteLine(karakter.KarakterAdı + " karakterinden " + karakter.KarakterSayısı + " adet bulundu."); }; Console.ReadLine();
string cumle = textBox1.Text; foreach (var karakter in (from k in cumle.ToCharArray()
group k by k into grup
orderby grup.Key
select new { KarakterAdı = grup.Key, KarakterSayısı = grup.Count() }).ToArray())
{
label1.Text=string.Format(karakter.KarakterAdı + " karakterinden " + karakter.KarakterSayısı + " adet bulundu.");
};dostum kodları yapıştırdım. dediğin gibide string.length yapmaya çalıştım fakat olmadı. hata resmisithlord dedi: ↑once a harfine sonra b harfine ve sirayla z harfine kadar her harf icin tum kelimeyi taramak cok buyuk harf sayisina sahip kelimeler (veya cumleler) icin dogru bir yontem degildir. Algoritma dersini aldiysaniz bu cozum O(n^2) dir oysa lineer O(n) zamanda cozum icin hash tablosu kullanmaniz lazim. soyleki:int hashtablo[29]; for(int i =0 ; i< strlen(cumle); i++) { char harf = cumle[i]; int harfindex = harf -65; // Turkce karakterler icin bu sekilde index bulamazsin ama ingilzice karakterler icin 65 ten baslayabilirsin hashtable[harfindex] ++; //bu karakterin degerini bir artiriyoruz. }
Yukarida goruldugu gibi sadece bir dongu ile tum harflerin kelime icerisinde kac defa gozuktugu bulunabilir. Simdi sen C# ta istemissin rahatca C# kodunu yazabilmen lazim. strlen yerine String.Length , cumle yerine String.charAt(i) fonksiyornlarini kullanabilirsin.
Kolay gelsin

using System;
public class Hello3
{
public static void Main(string[] args)
{
int[] hashlist = new int[29];
string kelime = "sithlord";
for(int i = 0 ; i < kelime.Length; i++) {
hashlist[(int)kelime[i] - 97] ++;
}
for(int i = 0 ; i < 29; i++) {
if(hashlist[i] > 0) Console.WriteLine((char)(i+97)+" "+ hashlist[i].ToString());
}
}
}
hocam sonrada yapsanız olur. sinavınız daha önemli.crazzy.x dedi: ↑şu an 3 arkadaş oturduk yarın son finalimiz olmasına rağmen bu sorunun cevabı nasıl daha kısa sürede yapılır onu tartışıyoruz bu tartışmanın sonu iyi bitecek gibi :)
hocam kod çalışıyor fakat sadece bir harf söylüyor. geçen mesajımdada yazmısdım. mesela abc kelimesi için c kelimesi 1 adet vardır diyor. bana 1 tane b 1 tane c 1 tane vardır yazan kod lazım.sithlord dedi: ↑Asagida calisan kodu veriyorum, yalniz odevin olma ihtimaline karsi bazi eksikler var
1. Asgidaki kod yalnizca kucuk harfler icin calisir
2.Asagidaki kod turkce karakterler kullanildiysa calismaz
yukaridaki iki kusur disinda kodu derledim, calisiyor.
Kolay gelsinusing System; public class Hello3 { public static void Main(string[] args) { int[] hashlist = new int[29]; string kelime = "sithlord"; for(int i = 0 ; i < kelime.Length; i++) { hashlist[(int)kelime[i] - 97] ++; } for(int i = 0 ; i < 29; i++) { if(hashlist[i] > 0) Console.WriteLine((char)(i+97)+" "+ hashlist[i].ToString()); } } }
evet hocam messagebox'da teker teker a,b,c diye verdi. label'da ve textbox'da son harfi veriyor.sithlord dedi: ↑yukaridaki kod sadece bir harf icin degil tum harfler icin yaziyor cevabi ornegin yukaridaki kodun bendeki ciktisi sudur:
# mcs hello.cs ; mono hello.exe
d 1
h 1
i 1
l 1
o 1
r 1
s 1
t 1
Eger sithlord yerine "karadirkaslarinkara" cumlesi verilirse bu defa bendeki ciktisi su :
a 6
d 1
i 2
k 3
l 1
n 1
r 4
s 1
kod calisiyor, baska bir problemin olsa gerek
Arkadas tamamen dogru anlatmis. Eger cikti sadece bulunan harfleri gostermesini istiyorsan hashtabale dizinde 0'dan haric olanlari ekrana yazdir o kadar kolay.sithlord dedi: ↑once a harfine sonra b harfine ve sirayla z harfine kadar her harf icin tum kelimeyi taramak cok buyuk harf sayisina sahip kelimeler (veya cumleler) icin dogru bir yontem degildir. Algoritma dersini aldiysaniz bu cozum O(n^2) dir oysa lineer O(n) zamanda cozum icin hash tablosu kullanmaniz lazim. soyleki:int hashtablo[29]; for(int i =0 ; i< strlen(cumle); i++) { char harf = cumle[i]; int harfindex = harf -65; // Turkce karakterler icin bu sekilde index bulamazsin ama ingilzice karakterler icin 65 ten baslayabilirsin hashtable[harfindex] ++; //bu karakterin degerini bir artiriyoruz. }
Yukarida goruldugu gibi sadece bir dongu ile tum harflerin kelime icerisinde kac defa gozuktugu bulunabilir. Simdi sen C# ta istemissin rahatca C# kodunu yazabilmen lazim. strlen yerine String.Length , cumle yerine String.charAt(i) fonksiyornlarini kullanabilirsin.
Kolay gelsin
Çerez tercihleriniz Sitenin çalışması için zorunlu çerezler kullanılır. Ölçüm ve reklam çerezleri yalnız onay verirseniz çalışır. Ayrıntılar