Hala forumda yeni yaşıyorum, bu yüzden forum - görgü kuralları sorunları için şimdiden özür dilerim.Int/char dizileri/dizeleri arasındaki farklar
int
dizileri ve char
dizileri arasındaki farkları anlamakta sorun yaşıyorum.
Geçenlerde başlangıçta sayı dizisi depolamak için char
dizisi kullanılan bir Proje Euler sorun için bir program yazdım ve daha sonra belirli karakterleri denilen ve bir ürünü bulmak için onlara int
işlemleri kullanmaya çalıştı. Bir char dizisi kullandığımda gülünç derecede büyük bir ürün aldım, açıkça yanlış. Bir karakter olarak (str[n]
) bir satır içi ((int)str[n]
) derlendiğini düşündüğüm şeyi dönüştürdüysem de aynısını yaptım. Sadece bir tam sayı dizisi kullandığımda işe yaradı. Bu işe yaramadı char
dize
char str[21] = "73167176531330624919";
için
şöyle
Kod olduğunu. Yaklaşık 40 tr civarında olması gereken bir cevap için yaklaşık 1,5 trilyonluk bir cevabım var. int
dizide
int str[] = {7,3,1,6,7,1,7,6,5,3,1,3,3,0,6,2,4,9,1,9};
Bu çalışma yaptı budur için
. Ayrıca in-line tip dökümünü çıkardım.
Bu şeylerin neden işe yaradığı/çalışmadığı ve bu fikirlerin daha iyi anlaşılmasına yol açabilecek herhangi bir şey hakkında herhangi bir açıklama takdir edilecektir. Yararlı şeyler için bağlantılar da vardır. Dizeleri, dizileri ve işaretçileri bolca araştırdım (lisede olduğum için kendimi eğitiyorum) ama kavramlar hala kafa karıştırıcı.
Yan soru, C dizeleri otomatik olarak diziler halinde saklanır mı yoksa sadece bunu yapmak mümkün mü?
Belki de [bu tablo] (http://www.asciitable.com), ascii karakterlerinin tedavisinde "int" değerleri olarak bir miktar ışık tutabilir. Ve evet, eğer 'dizi' ile altta yatan karakter verisini içeren bitişik belleği kastederseniz, bunlar (saklı bir 0-sonlandırıcı ile birlikte) saklanırlar. – WhozCraig
bu tablo char '0' ın int değeri 48'e karşılık geldiğini söylüyor mu? – Charles
Evet, değeri imzasız olsa da, önemli görünmeyebilir, ancak genişletilmiş ascii karakterlerini işlemeniz gerekiyorsa bu durumda olacaktır (bunun hemen altındaki tabloya bakın). Doğru yoldasın. Aşağıda birkaç cevap daha iyi açıklıyor. Ayrıca bu ('0' == 48) sadece ASCII için doğru olduğunu unutmayın. Sisteme bağlı diğer karakter kümeleri vardır (örneğin [EBCDIC] (http://en.wikipedia.org/wiki/EBCDIC)). – WhozCraig