tags:

views:

139

answers:

2
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);

        }   
    }   
}

I want to use string instead of char*.

+3  A: 
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*/ 
}

This is just a mock-up using a string. Some issues with your function

1)Where is your return value

2)If you intend to use string use cout, rather than printf, if it is C++

3)Use prefix ++.

DumbCoder
Nice use of `at(i)`. Note that `i` and `2` will be promoted to `unsigned long` in `i<str.length()-2`, though, so the loop might never terminate (or not for a long time).
Potatoswatter
+1  A: 

As others have posted, you did not document a return, so this will be equivalent code:

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

I think what you probably meant was:

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

implemented as:

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);
        }
    }
}
PatrickV