Bildirim
DEV C++ Anlamadığım Nokta
Daha Fazla
Bu Konudaki Kullanıcılar:
Daha Az
2 Misafir - 2 Masaüstü
Giriş
Mesaj
-
-
Merhaba yazdığın kodu düzelttim. açıklama da ekledim.
#include<stdio.h>
#include<conio.h>
#include<iostream>
#include<string.h>
using namespace std;
main()
{
char cumle[250];
int j,c=0,d,i=0,uz,tek[100];
char harfler[26];
int bayrak = 0;
cout<<"Cumleyi Yaziniz:";
for ( i = 0; i<100; i++)
{
tek[i]=0;
if(i < 26)
harfler[i] = '+';
}
gets(cumle);
i=0;
c=0;
uz=strlen(cumle);
j=strlen(cumle);
for(c=0;c<uz;c++)
{
j=uz;
for(j-1;j>=0;j--)
{
if(cumle[c]==cumle[j])
{
tek[c]++;
}
}
}
for(c=0;c<uz;c++)
{
bayrak = 0;
for(j = 0; j < 26; j++)
{/* harf daha önce yazdırılmışsa ( yedeklenmişse ) bayrak = 1 olacak */
if(harfler[j] == cumle[c])
{/* dolayısı ile bir daha aşağıda yazdırılamayacak*/
bayrak = 1;
break;
}
}
if(bayrak == 0) // ilgili harf ilk kez yazdırılıyor
{
cout<<cumle[c]<<" Harfi "<<tek[c]<<":Kere"<<endl;
for(j = 0; j < 26; j++)
{
if(harfler[j] == '+')
{/* ilk kez yazdırılan harf yedekleniyor */
harfler[j] = cumle[c];
break;
}
}
}
}
}
-
Merhaba ilgin ve cevabın için çok teşekkür ederim.Açıklamaların beni aydınlattı anladığım kadarıyla operatörleri tam olarak bilmiyorum.Bu yüzden sorun çıktı aynı for döngüsünü bende yarattım.Ama if kısmında aynı kelimeden olduğu zaman yedeklesin yazmasın ve diğer harfe geçsin kısmını düşünmüştüm ama nasıl yapacağımı bilmiyordum birde en baştaki harfler[26] kısmında harflere neden 50 değil 60 değil 26 verdiniz birde '+' nedir , açıklayabilirmisiniz ? bunları öğrenebileceğim yer varsa tavsiye edermisiniz çok teşekkür ederim. -
rica ederim.ingilizce karakterlersi test edeceğini düşündüm, ingilizce 26 harf olduğu için o şekilde ayarladım. aslında boşluk karakterini dikkate almamışım. bu durumda 27 olarak değiştirilebilir. yazacağın karakterlerin hepsini harf olarak varsaydığım için önceden hepsine '+' karakteri yerleştirdim, içi boş kalmasın ve dizi içinde ilk '+' buluncaya kadarki karakterlerin harf olacağını biliyorum. yani ilk başta harfler içinde +++++++++++++++++++ gibi karakterler var. a harfi geldiğinde a++++++++++++++++++, sonra b harfi gelse ab+++++++++++++++++ halini alacak. örneğin 3. karakter '+'. demek ki ilk iki karakter harf.
aslında burdaki işlem varsayım üzerine yapılmış. kullanıcını maksimum 26 farklı karakter gireceğini ve sayı girmeyeceğini varsayıyoruz. ama bunun yerine dinamik olan, harflere 26 karakter vermeden, gerek olduğunda kendiliğinden büyüyen bir yedekleme dizisi yapılabilir. pointer, malloc - realloc konularına girer. bilgisayar müh okumuyorsan muhtemelen göstermezler bu konuyu. dikkat gerektirir, hataları saçbaş yoldurur. ama kullanımı varsayımların olduğu kodlarda mecburidir. artık harf mi sayı mı farketmez, hepsi için çalışır. Diğer programlama dillerinde daha kolay kodlarla halledilebilir. kolay gelsin.
#include<stdio.h>
#include<conio.h>
#include<iostream>
#include<string.h>
#include <stdlib.h> /* realloc için gerekli */
using namespace std;
main()
{
char cumle[250];
int j,c=0,d,i=0,uz,tek[100];
char *harfler = NULL; /* yazdırılan harfler buraya yedeklenecek */
/* ilk başta içi boştur. harf geldikçe dinamik olarak büyüyecek*/
int boyut;
int bayrak = 0;
cout<<"Cumleyi Yaziniz:";
for ( i = 0; i<100; i++)
{
tek[i]=0;
}
gets(cumle);
i=0;
c=0;
uz=strlen(cumle);
j=strlen(cumle);
for(c=0;c<uz;c++)
{
j=uz;
for(j-1;j>=0;j--)
{
if(cumle[c]==cumle[j])
{
tek[c]++;
}
}
}
for(c=0;c<uz;c++)
{
// strchr(harfler,cumle[c])==NULL ile yazdırılacak harfin daha önce
// harfler içine yedeklenmiş mi soruluyor ancak ilk döngüde hata veriyor
// o nedenle ilk döngüyü pas geçmek için harfler == NULL (yani henüz hiç harf)
// yazılmadıysa, ilk harf için strchr(harfler,cumle[c]) çalıştırılmasın
if(harfler == NULL || strchr(harfler,cumle[c])==NULL)
{
cout<<cumle[c]<<" Harfi "<<tek[c]<<":Kere"<<endl;
boyut++; // harflerin yeni boyutu olacak
// harflerin hafızasını (alabileceği harf sayısını) dinamik olarak 1 artır
harfler = (char*) realloc (harfler, (boyut) * sizeof(char));
// yazdırılan harfi yedekle
harfler[boyut-1] = cumle[c];
}
}
}
-
Teşekkür ederim peki boşluk harfini göstermesini nasıl engelleyebilirim
cumlec[c]!='\0' Tanımını yapıyorum ama yinede boşluk tuşununda kaç adet girildiğini yazıyor . -
'\0' tahminimce string sonu için kullanılır. boşluk için ' ' veya ascii tablosu karşılığı sayı olarak 32 kullanılır. her ikisi de çalışır. diğer durumlara && ile bağladım, dolayısı ile boşluk hiçbir zaman işleme alınmıyor. yani yedeklenmiyor da, yazdırılmıyor da. bir nevi boşluk gelince pas geçiliyor.
if(cumle[c] != ' ' && (harfler == NULL || strchr(harfler,cumle[c])==NULL))
if(cumle[c] != 32 && (harfler == NULL || strchr(harfler,cumle[c])==NULL))
-
Anladım ama bu kodu hangi kısıma koyacağımı bulamadım
#include<stdio.h>
#include<conio.h>
#include<iostream>
#include<string.h>
using namespace std;
main()
{
char cumle[250];
char harfler[29],bosluk='\0';
int i=0,j,c=0,uz,tekrar[100];
int yedek=0;
cout<<"Cumleyi Yaziniz:";
for(i=0;i<100;i++){
tekrar=0;
if(i<29)
harfler='+';
}
gets(cumle);
i=0;
c=0;
uz=strlen(cumle);
j=strlen(cumle);
for(c=0;c<uz;c++){
j=uz;
for(j-1;j>=0;j--){
if(cumle[c]==cumle[j])
{
tekrar[c]++;
}
}
}
for(c=0;c<uz;c++){
yedek=0;
for(j=0;j<29;j++){
if(harfler[j]==cumle[c]){
yedek=1;
break;
}
}
if(yedek == 0){
cumle[c]!='\0';
cout<<cumle[c]<<" Harfi "<<tekrar[c]<<":Kere"<<endl;
for(j=0;j<29;j++){
if(harfler[j] == '+') {
harfler[j]=cumle[c];
break;
}
}
}
}
}
-
if(yedek == 0){
cumle[c]!='\0';
kısmını
if(cumle[c] != ' ' && yedek == 0) {
olarak değiştirmen gerekir.
Sayfa:
1
Ip işlemleri
Bu mesaj IP'si ile atılan mesajları ara Bu kullanıcının son IP'si ile atılan mesajları ara Bu mesaj IP'si ile kullanıcı ara Bu kullanıcının son IP'si ile kullanıcı ara
KAPAT X
Bu mesaj IP'si ile atılan mesajları ara Bu kullanıcının son IP'si ile atılan mesajları ara Bu mesaj IP'si ile kullanıcı ara Bu kullanıcının son IP'si ile kullanıcı ara
KAPAT X