Ubuntu Türkiye

Yazılım => Programlama => C/C++ => Konuyu başlatan: bahadirhtp - 30 Aralık 2011 - 15:47:06

Başlık: C'de iki dizi'nin eşitliğini kontrol
Gönderen: bahadirhtp - 30 Aralık 2011 - 15:47:06
while içinde iki array'in eşit olup olmadıgına bakmak ıstıyorum ama bır yol bulamadım. strıng olarak mı bakmam grek?

while{
  if( array[]==array2[]) //ıkıncı bır while yada for'la yaptgm calısmalar ıse yaramadı(butun elemanlar ıcın)
                  }
Başlık: Ynt: C'de iki dizi'nin eşitliğini kontrol
Gönderen: travego0403 - 30 Aralık 2011 - 15:52:51
Sorunuzu biraz daha detaylandırabilir misiniz?

Dizi bir int veya double dizi ise elemanlarını teker teker kontrol edebilirsin. dizi1[1]==dizi2[1] gibi. Fakat dizinin içeriği karakter dizisi ise dizinin elemanının her karakterini karşılaştırman gerekir. Eğer string kullanırsan string kütüphanesinde iki stringi karşılaştıran üye fonksiyonlar var.
Başlık: Ynt: C'de iki dizi'nin eşitliğini kontrol
Gönderen: bahadirhtp - 30 Aralık 2011 - 16:01:39
karakterdi ve sanırım bu işimi gorur
ornek olsun diye cıktı koyuyorum (:
  #include <string.h>
  main(){
     char ktr1[10],ktr2[10];
     int sonuc;
     printf("1. katar:");gets(ktr1);
     printf("2. katar:");gets(ktr2);
     sonuc = strcmp(ktr1,ktr2);
     if(sonuc>0)        puts("2. 1.den büyük");
     else if(sonuc<0)   puts("2. 1.den küçük");
    else               puts("2. 1. eşit");
}
Başlık: Ynt: C'de iki dizi'nin eşitliğini kontrol
Gönderen: travego0403 - 30 Aralık 2011 - 16:08:41
Yazdığınız kod eşitliğine bakmaktan daha çok büyüklük küçüklüğüne bakmıyor mu? Ya da istediğiniz bu mu sıralamak için.

Ayrıca gets() falan kullanmışsınız eğer ciddi bir iş için yazıyorsanız bunu gets() kullanmamanız önerilir.Çünkü herhangi bir kontrol etmeden veriyi direk alır ve değişkene atar. Buradada karakter katarınızın uzunluğu sabit olduğu için uzun girilen bir karakter katarında programınızda bellek problemleri yaşayabilirsiniz.
Başlık: Ynt: C'de iki dizi'nin eşitliğini kontrol
Gönderen: bahadirhtp - 30 Aralık 2011 - 16:13:02
ağzinda bal damlıyor (:
bende aynı şeyleri farkettim ve while{scan} yapayım dedım pekı ya sımdı esıtlıgen nasıl karar verıcek?
array[]='A''B''C''D'
array2[]='A''B''C''D'  gıbı

ancak şu sekılde bırlestırınce sorun kalktı
gets(data);const int ROW=(strlen( data ))+1;
bunada
if(strlen(data)==strlen(result)){q=0;};komutunu ekledim
ama eşit verdıgım degerlerde sonuc alamadım

not:strcmp komutundan yanıt alamadım
sanrıım ıkıncı karakter kumesı tırnak ıcınde olmalı
Başlık: Ynt: C'de iki dizi'nin eşitliğini kontrol
Gönderen: travego0403 - 30 Aralık 2011 - 16:31:04
Fikir vermesi açısından verdiğim örneği inceleyebilirsiniz. Örneğin eksiklikleri var birisi diğerinden uzunsa ilk diziye göre karşılaştırıyor falan, önemli olan dizileri karşılaştırma mantığını anlaman. Ayrıca string kullanırsan string kütüphanesine ait fonksiyonlar olması lazım.

#include <iostream>
#include <string.h>
using namespace std;

bool karsilastir(char[],char[]);
int main() {
char katar1[]="ubuntu";
char katar2[]="ubuntu";
char katar3[]="linux";
if(karsilastir(katar1,katar2)){
        cout<<"esit";
}
else{
        cout<<"esit degil";
}
return 0;
}
bool karsilastir(char dizi1[],char dizi2[]){
bool esitmi=true;
int n=strlen(dizi1);
for(int i=0;i<n;++i){
if(dizi1[i]!=dizi2[i]){
esitmi=false;
}
}
return esitmi;
}
Başlık: Ynt: C'de iki dizi'nin eşitliğini kontrol
Gönderen: bahadirhtp - 30 Aralık 2011 - 16:34:02
bool nedir?
Başlık: Ynt: C'de iki dizi'nin eşitliğini kontrol
Gönderen: travego0403 - 30 Aralık 2011 - 16:36:30
int double gibi bir tür. True veya false değerini alabilir.

Eğer aklını karıştırıyorsa int üzerine kurabilirsin fonksiyonu. Sıfır veya sıfırdan farklı bir değer döndürebilir.
Başlık: Ynt: C'de iki dizi'nin eşitliğini kontrol
Gönderen: bahadirhtp - 30 Aralık 2011 - 16:44:43
58 C:\Dev-Cpp\main.c 'for' loop initial declaration used outside C99 mode
Başlık: Ynt: C'de iki dizi'nin eşitliğini kontrol
Gönderen: travego0403 - 30 Aralık 2011 - 16:51:08
C++ kurallarıyla yazdığım için olması lazım. Çözümü için fonksiyon içindeki for(int i=0;; ) kısmındaki tanımlamayı fonksiyonun başında yapınız.int i=0; for(i=0;i<n;++i) gibi.
Başlık: Ynt: C'de iki dizi'nin eşitliğini kontrol
Gönderen: bahadirhtp - 30 Aralık 2011 - 16:53:15
tesekkurler sımdı gordum ve neden gets ıcın zararlı dedıgını anladım
mesela array[0] yada son eleman yok oluyor sanırım
ama bilgisayar degilmi sonucta(ahmak)
n=strlen()+1 dedıgınde problem puffff (:
Başlık: Ynt: C'de iki dizi'nin eşitliğini kontrol
Gönderen: travego0403 - 30 Aralık 2011 - 16:59:07
Evet bahsettiğiniz gibi olaylarda görülebilir. Çünkü karakter katarının son elemanı katarın bittiğini ifade eden /0 ile doldurulur. Bunların haricinde tahmin edemeyeceğiniz sorunlarla da karşılaşabilirsiniz. Bellek taşması, bellek sızıntısı gibi olayları boş zamanınızda bir araştırmanızı öneriyorum.
Başlık: Ynt: C'de iki dizi'nin eşitliğini kontrol
Gönderen: bahadirhtp - 30 Aralık 2011 - 17:04:13
Anladım, teşekkurler, herkese guzel orneklendırmeler oldu bence (:
Başlık: Ynt: C'de iki dizi'nin eşitliğini kontrol
Gönderen: heartsmagic - 30 Aralık 2011 - 22:36:48
Sorun çözüldü mü?
Başlık: Ynt: C'de iki dizi'nin eşitliğini kontrol
Gönderen: sem - 31 Aralık 2011 - 09:17:28
Döngü içerisinde tekrarlama yapmak uzun dizilerde beklenmeyen beklemelere yol açabileceği için bellek üzerinden kontrol yapmak daha hızlı olacaktır diye düşünüyorum...

Sanırım ilgili fonksiyon şu idi;
http://www.cplusplus.com/reference/clibrary/cstring/memcmp/
Başlık: Ynt: C'de iki dizi'nin eşitliğini kontrol
Gönderen: bahadirhtp - 02 Ocak 2012 - 17:09:00
strncmp ile cozuldu (:
Başlık: Ynt: C'de iki dizi'nin eşitliğini kontrol
Gönderen: alquirel - 02 Ocak 2012 - 17:14:35
Alıntı yapılan: bahadirhtp - 02 Ocak 2012 - 17:09:00
strncmp ile cozuldu (:

strcmp demek istedin sanırım.

Başlığa [Çözüldü] ifadesi eklersen seviniriz.
Başlık: Ynt: C'de iki dizi'nin eşitliğini kontrol
Gönderen: sem - 02 Ocak 2012 - 21:22:35
Belkide strncmp'dir... C tarafında genelde fonksiyonların n'li versiyonları bulunyor... Sınırlı sayıda/karakterde işlem yapmak adına...
Başlık: Ynt: C'de iki dizi'nin eşitliğini kontrol
Gönderen: alquirel - 02 Ocak 2012 - 22:18:47
Başlıkta strncmp fonksiyonundan daha önce bahsedilmediği için yanlışlık mı oldu acaba diye dikkat çekeyim dediydim ;)