में रिकर्सन का उपयोग करके स्ट्रिंग की लंबाई निर्धारित करने का प्रयास करना मुझे स्ट्रिंग को पार करने का तरीका नहीं पता है।सी ++
सी ++
उत्तर
संकेत: अपने रिकर्सन में substr()
का उपयोग करें।
इसके अलावा, आपके पास दो आधारभूत मामले हैं। उनमें से एक में तीन मुद्दे हैं:
- इसमें इसकी एक वाक्यविन्यास त्रुटि है;
- यह स्ट्रिंग की लंबाई की गणना करने में सक्षम होने पर निर्भर करता है (जो आपके कार्य को करना है);
- यह अनावश्यक है कि आपके पास दूसरा आधार मामला है।
मैं इसे एक शॉट दूंगा, धन्यवाद! –
मैंने दो आधार मामलों को रखा क्योंकि उन्होंने कहा कि यदि स्ट्रिंग खाली है 0, और फिर मैं लंबाई == 1 का मूल मामला डालता हूं तो यह 0 0. –
@ user1893303 आप 0 को अपने बेस केस के रूप में उपयोग कर सकते हैं। –
यदि आपका उद्देश्य स्ट्रिंग को पार करना है, तो मैं एक इटरेटर का उपयोग करने का सुझाव देता हूं (std::string::begin
देखें)।
template<typename It>
int count(It const begin, It const end)
{
return (begin != end ? count(begin + 1, end) + 1 : 0);
}
int count(std::string const& s)
{
return count(s.begin(), s.end());
}
यह रिकर्सन का उपयोग कैसे करता है? –
@JanDvorak: यदि फ़ंक्शन का तर्क एक पुनरावर्तक है ("एंड" इटरेटर के साथ), यह रिकर्सिव है। –
शायद आप substr
का उपयोग करना चाहेंगे।
एक आकर्षण की तरह काम किया। धन्यवाद –
मुझे नहीं लगता कि आपको कोई अर्थ है, आप length
का उपयोग करते हैं जो पहले से ही आपकी गणना में लंबाई देता है। अगर मैं आपका शिक्षक था, तो मैं इसे एक वैध समाधान के रूप में स्वीकार नहीं करता।
तुम शायद मुझे पता है तुम एक सी ++ समाधान चाहते हैं, लेकिन अभी भी const char*
int count(const char* s){
if(*s == '\0')
return 0;
return 1 + count(s + 1);
}
आप _need_ 'const char *' नहीं, 'char * 'भी नहीं। –
समस्या यह नहीं है कि स्ट्रिंग इसकी लंबाई जानता है, लेकिन ओपी इसे बेस केस के रूप में उपयोग करता है। – irrelephant
अन्य उदाहरणों से मैंने पाया कि वे सभी वर्णों का इस्तेमाल करते थे लेकिन प्रश्न के लिए आवश्यकता एक स्ट्रिंग डेटा प्रकार का उपयोग करना था।मुझे रिकॉर्ज़न में लंबाई की गिनती करने के लिए मूर्खतापूर्ण पता है, जब आपको केवल देय राशि() फ़ंक्शन का उपयोग करना है, लेकिन मुझे लगता है कि प्रोफेसर चाहता है कि हम कम से कम स्ट्रिंग रिकर्सन का अनुभव करें। –
उपयोग करने के लिए की जरूरत है। कभी-कभी सी ++ से बेहतर है।
int count(const char *s) { if(*s == 0) return 0; else return 1 + count(++s); };
गिनती के रूप में कॉल करें (str.c_str())।
#include<stdio.h>
main(){
char str1[100];
gets(str1);
int i=0;i=len(str1,i);printf(" \nlength of string is %d",i);
}
int len(char s1[],int i) {
printf("\n%c",s1[i]);
int sum=0,count =1;
if(s1[i] == '\0') return 0;
else
return (count += len(s1,++i));
}
संकेत: स्ट्रिंग का आकार स्ट्रिंग का आकार पहला (या अंतिम) वर्ण हटा दिया गया है। खाली स्ट्रिंग का आकार शून्य है। – zackg
मुझे होमवर्क की तरह लगता है .. अब आप दूसरी आखिरी पंक्ति पर क्या करना चाहते हैं: 1 + गिनती (s.substr (0, s.length() - 1) लौटें; – Nils
हाँ यह होमवर्क है। कुछ खास नहीं है लेकिन यह मुझे बहुत अच्छा लगा रहा है। –