Dizi Karşılaştırma ?

Başlatan 3ddark, 29 Ekim 2008, 22:40:43

3ddark

char şifre[4]={1,1,1,1};
char girilen_şifre[4];

şifre[0]=1
şifre[1]=1
şifre[2]=1
şifre[3]=1
girilen_şifre[0]=1
girilen_şifre[1]=1
girilen_şifre[2]=1
girilen_şifre[3]=1

Ben bu degerleri nasıl karsılastırma yapabilir. For dongusu icinde mi yoksa baska bir yol ile yapabilirmiyim. Şifreli kilit yapıyorum tusları okuyorum dizinin icine atıyorum ama bunları nasıl karsılastırabilirim ?

for (i=0; i<dizi eleman sayısı; i++)
{
  if ( şifre[x] == girilen_şifre[x] )
    x++;
  else break;
}

sadece bu sekilde mi yapabilirim dizi uygulamasını
Yani yapmak istedigim 2 diziyi karsılastırmak ve 2 dizi aynı ise bir yere yönlenmek yanlıs ise başka bir yere yönlenmek
Yapılacak çok şey var

mytap

iki diziyi kontrol yerine toplamda kontrol et. Set edilen yani doğru şifresi topla bir diziye at. Sonra istenilen diziyi topla, doğru ile girileni karşılaştır.
-------------------------------------------------------- hayırlı günler, iyi çalışmalar..  --------------------------------------------------------

Tagli

@mytap, toplamda kontrol edersek 1234 ile 5410 aynı olmaz mı? Ben mi yanlış anladım acaba dediğini?

@3ddark; yazdığın döngüyü şu hale getirirsen olur sanırım:
for (i=0; i<dizi eleman sayısı; i++)
{
  if ( şifre[i] == girilen_şifre[i] )
    dogru++;
}

if (dogru == dizi eleman sayısı)
  sonuc = 1;
else
  sonuc = 0;


Gerçi doğru eşleşmeleri saymak yerine "şifre == girilen_şifre" ifadelerinin sonuçlarını AND'lemek daha etkin bir çözüm olur bence.
Gökçe Tağlıoğlu

arslan74

Merhaba,

C nin bu iş için hazır fonksiyonu var.

memcmp(); (Memory compare) onu kullanabilirsiniz.

Nasıl kullanıldığını aşağıdaki linke bakarak yapabilirsiniz.

http://www.cplusplus.com/reference/clibrary/cstring/memcmp.html


Selamlar

3ddark

int dizi_karsilastir(const void *vp1, const void *vp2, unsigned int nbytes)
{
const unsigned char *p1 = vp1;
const unsigned char *p2 = vp2;
unsigned int k;
for (k = 0; k < nbytes; ++k)
	if (p1[k] != p2[k])				  //p1<p2  = return < 0
	return p1[k] < p2[k] ? -1 : 1;	//p1>p2  = return > 0
return 0;							     //p1==p2 = return = 0
}


@arslan74  hocam sagol dedigin yoldan giderek ve necati ergin hocanın kitabından yararlanarak cozdum olayı. Bu fonksiyon gayet guzel net ve acık herseyi ile tekrar herkeze teşekkürler
Yapılacak çok şey var