2012-12-11 11 views
6

में रिकर्सन का उपयोग करके स्ट्रिंग की लंबाई निर्धारित करने का प्रयास करना मुझे स्ट्रिंग को पार करने का तरीका नहीं पता है।सी ++

+2

संकेत: स्ट्रिंग का आकार स्ट्रिंग का आकार पहला (या अंतिम) वर्ण हटा दिया गया है। खाली स्ट्रिंग का आकार शून्य है। – zackg

+0

मुझे होमवर्क की तरह लगता है .. अब आप दूसरी आखिरी पंक्ति पर क्या करना चाहते हैं: 1 + गिनती (s.substr (0, s.length() - 1) लौटें; – Nils

+1

हाँ यह होमवर्क है। कुछ खास नहीं है लेकिन यह मुझे बहुत अच्छा लगा रहा है। –

उत्तर

10

संकेत: अपने रिकर्सन में substr() का उपयोग करें।

इसके अलावा, आपके पास दो आधारभूत मामले हैं। उनमें से एक में तीन मुद्दे हैं:

  1. इसमें इसकी एक वाक्यविन्यास त्रुटि है;
  2. यह स्ट्रिंग की लंबाई की गणना करने में सक्षम होने पर निर्भर करता है (जो आपके कार्य को करना है);
  3. यह अनावश्यक है कि आपके पास दूसरा आधार मामला है।
+0

मैं इसे एक शॉट दूंगा, धन्यवाद! –

+0

मैंने दो आधार मामलों को रखा क्योंकि उन्होंने कहा कि यदि स्ट्रिंग खाली है 0, और फिर मैं लंबाई == 1 का मूल मामला डालता हूं तो यह 0 0. –

+1

@ user1893303 आप 0 को अपने बेस केस के रूप में उपयोग कर सकते हैं। –

1

यदि आपका उद्देश्य स्ट्रिंग को पार करना है, तो मैं एक इटरेटर का उपयोग करने का सुझाव देता हूं (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()); 
} 
+1

यह रिकर्सन का उपयोग कैसे करता है? –

+1

@JanDvorak: यदि फ़ंक्शन का तर्क एक पुनरावर्तक है ("एंड" इटरेटर के साथ), यह रिकर्सिव है। –

1

शायद आप substr का उपयोग करना चाहेंगे।

+0

एक आकर्षण की तरह काम किया। धन्यवाद –

3

मुझे नहीं लगता कि आपको कोई अर्थ है, आप length का उपयोग करते हैं जो पहले से ही आपकी गणना में लंबाई देता है। अगर मैं आपका शिक्षक था, तो मैं इसे एक वैध समाधान के रूप में स्वीकार नहीं करता।

तुम शायद मुझे पता है तुम एक सी ++ समाधान चाहते हैं, लेकिन अभी भी const char*

int count(const char* s){ 
    if(*s == '\0') 
     return 0; 
    return 1 + count(s + 1); 
} 
+1

आप _need_ 'const char *' नहीं, 'char * 'भी नहीं। –

+1

समस्या यह नहीं है कि स्ट्रिंग इसकी लंबाई जानता है, लेकिन ओपी इसे बेस केस के रूप में उपयोग करता है। – irrelephant

+0

अन्य उदाहरणों से मैंने पाया कि वे सभी वर्णों का इस्तेमाल करते थे लेकिन प्रश्न के लिए आवश्यकता एक स्ट्रिंग डेटा प्रकार का उपयोग करना था।मुझे रिकॉर्ज़न में लंबाई की गिनती करने के लिए मूर्खतापूर्ण पता है, जब आपको केवल देय राशि() फ़ंक्शन का उपयोग करना है, लेकिन मुझे लगता है कि प्रोफेसर चाहता है कि हम कम से कम स्ट्रिंग रिकर्सन का अनुभव करें। –

0

उपयोग करने के लिए की जरूरत है। कभी-कभी सी ++ से बेहतर है।

 
int count(const char *s) 
{ 
    if(*s == 0) 
    return 0; 
    else return 1 + count(++s); 
}; 

गिनती के रूप में कॉल करें (str.c_str())।

0
#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)); 
    }