Örnek: Verilen bir text'teki satır,kelime ve cümle sayılarının bulunması
Kod Açıklaması:
Programda öncelikle bir
giriş.txt isimli bir dosya oluşturduk. Daha sonra bir struct oluşturup içinde
kelime, cümle, satır ve linked kullanımı için next adlı struct oluşturduk. Bu
struct ı ise say adlı bir değişken ile p adlı bir pointer la devam ettirdik.
Her linked kullanımı her paragraf için ayrı olmuştur. Yani bir diğer paragrafı
incelemek için konsola p=p->next komutu vererek diğer alanımıza geçtik.
Paragraflardaki cümle sayımlarını ‘.’ karakterlerini sayarak rahatlıkla bulduk.
Daha sonra kelime sayılarını ise boşluk sayısından ve satır indiren ‘enter’
komutlarının yardımıyla bulduk. Yöntemimiz her satırda boşluk sayısının bir
fazlası kadar kelime olmasıdır. Ayrıca alt satıra geçmek de bir boşluk bırakmak
anlamına geldiği için bunu da göz önüne almayı unutmadık. Satır sayılarını da
paragraftaki ‘\n’ karakterini araştırıp bulduk. Paragraf sayılarını bulmak için
de üst üste olan iki tane ‘\n’ karakterlerini araştırarak saydık.
Paragraflardaki non-alpha kelimelerini bulmak için bir yöntem kullandım fakat kodun
çıkmaza girmesi sonucu o kısmını ekleyemedim. Yöntemi kısaca açıklamak
istersek:
1-Öncelikle iki adet dizi
gerekli(a[] ve b[] şeklinde). İkisinin de boyutu paragraflardaki boşluk sayısı
kadar olmalı.
2-Dosyamızdaki karakterleri tek
tek okurken her boşluktan sonra a[i] dizisinin indisi bir artırılmalı sonucu
indisine eşitlenmeli.
3-Bu işlemler yapılırken ise
boşluk karakteri bulunana kadar alfabetik olmayan karakter bulununca b[i]
dizisinin kendisi, boşluk karakteri bulununca ise b[i] dizisinin indisi bir
arttırılıp aynı zamanda da yeni dizi sıfırlanır.
4- Değerlendirmeyi ise dizilerin indisleri aynı iken b
dizisi sıfırdan farklı ise bu alfabetik olmayan kelime olduğu anlamına
geldiğini düşünüp ona göre sayım yaparız.
Örneğin Kodu:
#include <stdio.h>
#include <stdlib.h>
struct SAYAC{
int kelime;
int satir;
int bosluk;
int cumle;
int nonalpha;
struct SAYAC *next;
};
int main(int argc, char *argv[])
{FILE *deneme;
struct SAYAC *p;
struct SAYAC say={0,0,0,0,0,NULL};
p=&say;
int paragraf,i,x,topcumle=0,topkelime=0,topsatir=0;
p->satir=0;
p->cumle=0;
p->bosluk=0;
int karakter;
deneme=fopen("giris.txt","r");
if(deneme==NULL)
{ printf("Dosya acılırken hata olustu!!\n Programdan cikiliyor!!");
exit(1);
}
putchar(karakter=getc(deneme));
while(!feof(deneme))
{
if(karakter=='.'){
p->cumle++;
}
if(karakter==' '){
p->bosluk++;
}
if(karakter=='\n'){
paragraf++;
if(paragraf==2)
{
p->next=(struct SAYAC*)calloc(1,sizeof(struct SAYAC));
p=p->next;
p->satir=0;
p->cumle=0;
p->kelime=0;
p->bosluk=0;
}
else
{
p->satir++;
}
}
else{
paragraf=0;
}
putchar(karakter=getc(deneme));
}
p=&say;
printf("\n\n1. paragraf \n");
p->bosluk=p->bosluk+p->satir-1;
p->kelime=p->bosluk+1;
topsatir=p->satir;
topcumle=p->cumle;
topkelime=p->kelime;
printf("\nSatir: %d",p->satir);
printf("\nKelime sayisi: %d\n",p->kelime);
printf("Cumle sayisi: %d\n\n",p->cumle);
x=2;
p=p->next;
while(p!='\0')
{ printf("%d. paragraf\n",x);
p->bosluk=p->bosluk+p->satir;
p->kelime=p->bosluk;
topsatir=p->satir+topsatir;
topcumle=p->cumle+topcumle;
topkelime=p->kelime+topkelime;
printf("\nSatir: %d",p->satir);
printf("\nKelime sayisi: %d\n",p->kelime);
printf("Cumle sayisi: %d\n\n",p->cumle);
p=p->next;
x++;
}
printf("TOPLAM\nSatir: %d\nKelime: %d\nCumle: %d\n",topsatir,topkelime,topcumle);
fclose(deneme);
system("PAUSE");
return 0;
}
Hiç yorum yok:
Yorum Gönder