2012-02-15 10 views
12

पीएचपी के प्रलेखन एक सा विरल है और मैं पढ़ लिया है इस समारोह ASCII मूल्यों तुलना कि इतने ..."echo strcmp ('60 ',' 100 ') क्यों है;" PHP उत्पादन 5 में? इस समारोह पर

echo strcmp('hello', 'hello'); 
//outputs 0 as expected - strings are equal. 
echo '<hr />'; 

echo strcmp('Hello', 'hello'); 
//outputs -32, a negative number is expected as 
//uppercase H has a lower ASCII value than lowercase h. 
echo '<hr />'; 

echo strcmp('60', '100'); 
//outputs 5. 

पिछले उदाहरण मुझे भ्रमित कर रहा है। मुझे समझ में नहीं आता कि यह सकारात्मक संख्या क्यों बना रहा है।

  • ASCII 6 = 54

  • कुल ASCII '60' के मूल्य के 0 = 48

  • 1 की ASCII मूल्य = 49
  • ASCII मूल्य के मूल्य = (54 + 48) = 102

  • की '100' = (49 + 48 + 48) = 145

strcmp कुल ASCII मूल्य() फ़ंक्शन रों है aying कि '60' भले ही ऐसा लगता है कि ASCII मूल्य और '100' की स्ट्रिंग लंबाई

किसी को भी व्याख्या कर सकते हैं क्यों '60'

से अधिक है "अधिक" '100' से है?

धन्यवाद

उत्तर

13

strcmp() तार के बीच पहला मेल नहीं खाने वाले चरित्र का अंतर देता है।

6-1 5.

है आप इसे को देखते हैं, तो आप शायद अक्षर या अंक — सिर्फ संख्या

+6

ध्यान दें कि यह गारंटीकृत व्यवहार नहीं है - केवल एक चीज की गारंटी है कि इन इनपुट पैरामीटर के लिए मान शून्य से बड़ा होगा। –

+2

@ सिमोन रिचटर: सहमत हैं कि इसकी गारंटी नहीं है। लेकिन यह * पारंपरिक है। कुछ कोड जो मैंने 1 9 78 में लिखा था जो रिटर्न वैल्यू की गणना करने की इस विधि पर निर्भर करता है * अभी भी काम करता है *! – wallyk

+0

@ वैलीक, आप कैसे जानते हैं कि यह उत्तर सही है जब दस्तावेज़ ने यह नहीं कहा कि यह पहले चरित्र का अंतर देता है? – Pacerier

8

क्योंकि पहली अंतर पर strcmp() बंद हो जाता है यह पाता है नहीं देख रहे हैं। इसलिए '1' के ASCII मूल्य और '6'

+0

@ वैलीक, आप कैसे जानते हैं कि इस व्यवहार की गारंटी है जब दस्तावेज़ ने यह नहीं कहा कि यह पहले चरित्र का अंतर देता है? – Pacerier

5

6 के ASCII मान के बीच का अंतर 1 से 5 "बड़ा" है। यह व्याख्यात्मक तुलना है। पहला चरित्र अलग है, वहीं जहां तुलना बंद हो जाती है।

संबंधित मुद्दे