मुझे पर्ल में एक स्ट्रिंग में एक सबस्ट्रिंग की घटना को गिनने के लिए एक प्रोग्राम को लागू करने की आवश्यकता है। मैंने इसेमैं पर्ल में ओवरलैपिंग सबस्ट्रिंग कैसे गिन सकता हूं?
sub countnmstr
{
$count =0;
$count++ while $_[0] =~ /$_[1]/g;
return $count;
}
$count = countnmstr("aaa","aa");
print "$count\n";
अब यह सामान्य रूप से किया गया है। हालांकि, उपरोक्त कार्यान्वयन में मैं 'aa' में 'aa' की घटना को गिनना चाहता हूं। यहां मुझे 1 के रूप में उत्तर मिलता है जो उचित लगता है लेकिन मुझे ओवरलैपिंग मामलों पर भी विचार करने की आवश्यकता है। इसलिए उपर्युक्त मामले को 2 के रूप में जवाब देना चाहिए क्योंकि अगर हम ओवरलैप मानते हैं तो दो 'एए' हैं।
क्या कोई सुझाव दे सकता है कि इस तरह के फ़ंक्शन को कैसे कार्यान्वित किया जाए ??
आप तथाकथित "goatse ऑपरेटर" (यह वास्तव में एक ऑपरेटर नहीं है) एक पास में एक संख्या प्राप्त करने के लिए उपयोग कर सकते हैं: 'मेरी $ संख्या =() = $ स्ट्रिंग = ~/$-स्ट्रिंग/जी,' । यह ओवरलैपिंग सबस्ट्रिंग्स के आपके पता लगाने को ठीक नहीं करता है। मैं अगली टिप्पणी में जाओ। – daotoad
"बकरी ऑपरेटर" या जीओ काम करता है क्योंकि जब स्केलर संदर्भ में मूल्यांकन किया जाता है, तो सूची में असाइनमेंट असाइनमेंट के लिए प्रदान किए गए तत्वों की संख्या देता है। इस उदाहरण पर विचार करें: '$ foo =() = (1,3,2,9) ';', संख्याओं की सूची खाली सूची में असाइन की गई है। सभी मानों को त्याग दिया जाता है, लेकिन '$ foo' के मान प्राप्त करने के लिए असाइनमेंट का मूल्यांकन किया जाता है। चूंकि '$ foo' एक स्केलर है, इसलिए हम सूची असाइनमेंट का मूल्यांकन करते हैं, और' 4' प्राप्त करते हैं। इस प्रकार, एक बेकार अस्थायी सरणी को खत्म करने के लिए जीओ का उपयोग किया जा सकता है। – daotoad