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)
}
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.
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");
}
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.
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ı
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;
}
bool nedir?
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.
58 C:\Dev-Cpp\main.c 'for' loop initial declaration used outside C99 mode
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.
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 (:
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.
Anladım, teşekkurler, herkese guzel orneklendırmeler oldu bence (:
Sorun çözüldü mü?
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/
strncmp ile cozuldu (:
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.
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ıkta strncmp fonksiyonundan daha önce bahsedilmediği için yanlışlık mı oldu acaba diye dikkat çekeyim dediydim ;)