int occurrences = 0;
string::size_type start = 0;
while ((start = base_string.find(to_find_occurrences_of, start)) != string::npos) {
++occurrences;
start += to_find_occurrences_of.length(); // see the note
}
string::find
प्रेरक वस्तु में देखने के लिए और (इस अधिभार में) एक चरित्र स्थान देता है जिसपर तलाश शुरू करने के लिए एक स्ट्रिंग लेता है, और स्ट्रिंग की घटना की स्थिति लौटाता है, या string::npos
अगर स्ट्रिंग नहीं मिली है।
0 (पहला वर्ण) पर और पाश की हालत में चर start
शुरू होता है, तो आप start
का उपयोग जहां तलाश शुरू करने के लिए find
बताने के लिए है, तो start
को find
की वापसी मान असाइन। घटना गिनती में वृद्धि; अब start
स्ट्रिंग की स्थिति रखता है, तो आप to_find_occurrences_of.length()
आगे वर्णों को फिर से शुरू कर सकते हैं।
drhirsch मुद्दा यह है कि अगर
to_find_occurrences_of
वर्णों की एक दोहराया अनुक्रम में शामिल है,
start += to_find_occurrences_of.length()
कर कुछ घटनाओं को छोड़ सकते हैं बनाता है। उदाहरण के लिए, यदि
base_string
"ffff"
और
to_find_occurrences_of
"ff"
था, तो
to_find_occurrences_of.length()
start
पर
to_find_occurrences_of.length()
जोड़ने पर केवल 2 घटनाओं की गणना की जाएगी। आपको लगता है कि से बचने के लिए चाहते हैं,
start
को 1 के बजाय
to_find_occurrences_of.length()
जोड़ने के लिए, और कहा कि उदाहरण में, 3 घटनाओं उपयोगकर्ता परिभाषित ढूँढें से स्ट्रिंग में स्ट्रिंग घटना को खोजने के लिए सिर्फ 2.
स्रोत
2011-12-23 09:20:26
@ BjörnPollex टैग निकालें # सी तार – DreamCodeer