C'de iki dizi'nin eşitliğini kontrol

Başlatan bahadirhtp, 30 Aralık 2011 - 15:47:06

« önceki - sonraki »

0 Üyeler ve 3 Ziyaretçi konuyu incelemekte.

bahadirhtp

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)
                  }
GOD'S A KID WITH AN ANT FARM LADY HE'S NOT PLANNING ANYTHIN'

travego0403

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.
"Matematik bir dildir ve bu dilde şairlere fizikçi denir." Richard Feynman

bahadirhtp

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");
}
GOD'S A KID WITH AN ANT FARM LADY HE'S NOT PLANNING ANYTHIN'

travego0403

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.
"Matematik bir dildir ve bu dilde şairlere fizikçi denir." Richard Feynman

bahadirhtp

#4
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ı
GOD'S A KID WITH AN ANT FARM LADY HE'S NOT PLANNING ANYTHIN'

travego0403

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;
}
"Matematik bir dildir ve bu dilde şairlere fizikçi denir." Richard Feynman

bahadirhtp

GOD'S A KID WITH AN ANT FARM LADY HE'S NOT PLANNING ANYTHIN'

travego0403

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.
"Matematik bir dildir ve bu dilde şairlere fizikçi denir." Richard Feynman

bahadirhtp

58 C:\Dev-Cpp\main.c 'for' loop initial declaration used outside C99 mode
GOD'S A KID WITH AN ANT FARM LADY HE'S NOT PLANNING ANYTHIN'

travego0403

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.
"Matematik bir dildir ve bu dilde şairlere fizikçi denir." Richard Feynman

bahadirhtp

#10
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 (:
GOD'S A KID WITH AN ANT FARM LADY HE'S NOT PLANNING ANYTHIN'

travego0403

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.
"Matematik bir dildir ve bu dilde şairlere fizikçi denir." Richard Feynman

bahadirhtp

Anladım, teşekkurler, herkese guzel orneklendırmeler oldu bence (:
GOD'S A KID WITH AN ANT FARM LADY HE'S NOT PLANNING ANYTHIN'

heartsmagic

Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

sem

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/
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

bahadirhtp

GOD'S A KID WITH AN ANT FARM LADY HE'S NOT PLANNING ANYTHIN'

alquirel

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.

sem

Belkide strncmp'dir... C tarafında genelde fonksiyonların n'li versiyonları bulunyor... Sınırlı sayıda/karakterde işlem yapmak adına...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

alquirel

Başlıkta strncmp fonksiyonundan daha önce bahsedilmediği için yanlışlık mı oldu acaba diye dikkat çekeyim dediydim ;)