2013-03-04 1 views
5

मुझे सी ++ में तारों के वर्णमाला क्रम के बारे में एक प्रश्न है। हमें मैं दो स्ट्रिंग है मान लीजिए:
सी ++ तारों पर < and > वर्णमाला क्रम को दर्शाता है?

string x="asd123"; 
    string y="asd136"; 


हम < या> ऑपरेटरों के साथ इन तार की तुलना कर सकते हैं? उदाहरण के लिए: हम कह सकते हैं

if(x>y) 
    cout<<"....."; 

कि हमेशा काम करता है? धन्यवाद।

+7

पढ़ा गया: http://en.cppreference.com/w/cpp/string/basic_string/operator_cmp – billz

उत्तर

9

तारों की तुलना लेक्सिकोग्राफिक (शब्दकोश शैली) की तुलना में की जाती है, एक स्ट्रिंग के साथ जो लंबे समय से पहले एक और स्ट्रिंग का एक छोटा सबसेट होता है। लेकिन यह आवश्यक वर्णमाला नहीं है; यह अंतर्निहित चरित्र एन्कोडिंग के अनुसार है। अधिकांश सिस्टम इन दिनों ASCII का उपयोग करते हैं, इसलिए लोअरकेस अक्षर क्रम में बाहर आते हैं, और अपरकेस वर्ण क्रम में बाहर आते हैं, और अपरकेस वर्ण छोटे अक्षरों के वर्णों से पहले आते हैं।

+1

ए-जेड अक्षर। गैर-अंग्रेज़ी "विशेष" वर्ण, जैसे कि, एए, ö, ń, ǹ, í, ì, é, è, ë, और कई अन्य समान चीजें बिना किसी काम के सभी तरह से व्यवस्थित नहीं होती हैं। –

6

हां, std::string::operator> के साथ std::string एस की तुलना में हमेशा काम करता है। तारों की तुलना lexicographically से की जाती है। इसका मतलब है कि दो तारों के प्रत्येक संबंधित तत्व की तुलना बदले में की जाती है जब तक कि दो पाए जाते हैं जो बराबर नहीं होते हैं, और यह आदेश स्ट्रिंग के क्रम को निर्धारित करता है।

लेक्सिकोग्राफिक ऑर्डरिंग के प्रत्येक तत्व पर < करता है। यही है, std::string के लिए, प्रत्येक char की तुलना < का उपयोग करके की जाएगी। यह बस उन char एस के मानों की तुलना करेगा। जहां तक ​​सी ++ का संबंध है, char सिर्फ एक संख्यात्मक मान है। इन मानों को निष्पादन वर्ण सेट (जो एक आधुनिक सी ++ कंपाइलर के लिए, लगभग हमेशा कम से कम ASCII संगत है) द्वारा स्ट्रिंग अक्षर में अक्षरों में मैप किए जाते हैं।

+1

@pst: 'string' अक्षरों का नहीं, बाइट्स का संग्रह है। तुलना बाइट मूल्य से है। मुफ्त लंच नहीं। –

+0

@ बेंजामिन लिंडले अच्छा बिंदु, धन्यवाद। –

+0

@pst मेरा संपादन उसमें शामिल है। –

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