Tam Sürümünü Görmek İçin : kelime aratma
yakup yak
16/01/2007, 01:49
merhaba,
c++ da text dosyasından okutulan metin içinde kelime aratma yapmam gerekiyor.arattığım kelimeden, text dosyasının içinde kaç tane olduğu lazım.
strstr ile aranılan ilk kelimeyi bulabiliyorum.Ama 2. , 3. , 4 . ....kelimeleri nasıl bulabilirim. Yardımcı olursanız sevinirm.
Son olarak arama yaptım ama bu konuyla ilgili bir şey bulamadım yada ben farketmedim eğer bu konu daha önceden açılmışsa şimdiden özür dilerim.
acehreli
16/01/2007, 02:38
strstr'la ugrasmaya gerek yok. C++'in std::string tUrUnu kullan.
Ondan sonra std::map<std::string, unsigned int> tUrUnde bir topluluk tutarak her bir kelimeden kac tane oldugunu sayabilirsin.
Belki "histogram" anahtar sozcuguyle aratinca bir seyler cikar.
Ali
kelimeyi bulduktan sonra devamında araman lazım
strstr nin döndüğü pointıra aranan kelimenin uzunluğunu ekle sonucu
strstr de Text yerine kullan
int KelimeSayisi(char *Metin,char *Kelime)
{
char *tmp=Metin;
int MLen,KLen;
KLen=strlen(Kelime);
int i=0;
for(;;){
tmp=strstr(tmp,Kelime);
if(tmp)
i++;
else
break;
MLen=strlen(tmp);
if(MLen< 2*KLen)
break;
else
tmp=tmp+KLen;
}
return i;
}
yakup yak
17/01/2007, 21:07
Arkadaşlar cevaplarınız için teşekkür ederim. Belki bir başka arkadaş takılır die kodları göndereyim.
#include <stdio.h>
#include <io.h>
#include <string.h>
/*dosyada karakter arama programı */
FILE *dosya;
main()
{
char *sonuc;
int strno=0,say=0;
char giris[64];
char aranan[64];
char satir[80];
printf ("Aranacak karakter katarini giriniz");
gets (aranan);
dosya = fopen ("c:/yakup.txt","r+");
rewind (dosya);
while (fgets(satir,80,dosya)!= NULL)
{
strno++;
if((sonuc=strstr(satir ,aranan))!=NULL)
{
printf("Satir numarasi %d ;karakter baslangic degeri %d %s\n",strno,strlen(satir)-strlen(sonuc),satir);
say++;
}
}
printf("\n* * * * %d adet sonuc bulundu. * * * * \n\n\n",say);
fclose(dosya);
}
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.