2010-09-25 7 views
-1
char * recursivecombo(char *str, int choices, int level) 
{ 
    int len = strlen(str); 

    level++; 
    if(level == choices) 
    { 
      for (int i = 0; i < len -2; i++) 

      { 

        printf("%c", str[i]) ; 
      } 
    } 
    else 
    { 
     for (int i = 0; i < len - 2; i++) 
     { 
       printf("%c",str[i]); 
       recursivecombo(str.substr(1), level); 

     } 
    } 
} 

Je souhaite utiliser une chaîne à la place de char *.Comment convertir ce code pour utiliser la chaîne

+1

qu'est-ce que str.substr? – Chubsdad

+2

Comment pouvez-vous faire ce str.substr (1) sur un char *? Et, vous ne retournez rien de cette fonction. En Java, ce ne serait pas compilable, je ne sais pas comment C++ gère cela, mais je suppose que certaines erreurs au moins. – InsertNickHere

+0

Pourquoi voulez-vous utiliser une chaîne? Est-il nettement meilleur (plus rapide, plus petit, lisible, portable) que ce code? – JoshD

Répondre

4
std::string recursivecombo(const std::string& str, int choices, int level) 
{ 
    level++; 
    for (int i = 0; i < str.length() -2; ++i) 
    { 
     cout<<str.at(i) ; 
     if(level != choices) 
      recursivecombo(str.substr(1),8,/*Missing choce*/ level); 
    } 
/*Missing return value*/ 
} 

Ceci est juste une maquette utilisant une chaîne. Quelques problèmes avec votre fonction

1) Où est votre valeur de retour

2) Si vous avez l'intention d'utiliser l'utilisation de la chaîne Cout, plutôt que printf, si elle est C

3 ++) Utiliser le préfixe ++.

+0

Belle utilisation de 'at (i)'. Notez que 'i' et' 2' seront promus 'unsigned long' dans' i Potatoswatter

2

Comme d'autres l'ont, vous ne documentait pas un retour, ce sera donc un code équivalent:

string recursivecombo(const std::string & str, int choices, int level) 
{ 
    what I wouldn't give for a holocaust cloak 
} 

Je pense que ce que vous vouliez probablement dire était:

void recursivecombo(const std::string & strInput, int nChoices, int nLevel = 0); 

mis en œuvre:

void recursivecombo(const string & strInput, int nChoices, int nLevel /* = 0 */) 
{ 
    nLevel++; 
    if(nLevel == nChoices) cout << strInput.substr(0,strInput.length()-2); 
    else 
    { 
     for (int i = 0; i < str.length() - 2; i++) 
     { 
      cout << str.at(i); 
      recursivecombo(str.substr(1), nChoice, nLevel); 
     } 
    } 
}