如何更改此代码?

时间:2010-09-25 18:16:19

标签: c++

#include <iostream>
#include <string.h> // for strlen
#include <stdlib.h> // for atoi
#include <sstream>
void expand_combinations(const char *remaining_string, std::ostringstream& i, int remain_depth)
{
    if(remain_depth==0)
    {
        std::cout << i.str() << std::endl;
        return;
    }

    for(int k=0; k < strlen(remaining_string); ++k)
    {
        std::ostringstream l;
        l << i.str();
        l << remaining_string[k];
        expand_combinations(remaining_string+k+1, l, remain_depth - 1);
    }
    return;
}
int main(int argc, char **argv)
{
    std::ostringstream i;
    if(argc<3) return 1;
    expand_combinations(argv[1], i, atoi(argv[2]));
    return 0;
}

如何更改此代码以使其不使用ostringstream?

1 个答案:

答案 0 :(得分:2)

以下是使用字符串代替ostringstream的代码。通常我会重构代码,但由于你的问题非常具体,我会不管它。

#include <iostream>
#include <string>
#include <stdlib.h>

using namespace std;

void expand_combinations(const char *remaining_string, string const & s, int remain_depth)
{
    if(remain_depth==0)
    {
        std::cout << s << std::endl;
        return;
    }

    for(int k=0; k < strlen(remaining_string); ++k)
    {
        string str(s);
        str.append(1, remaining_string[k]);
        expand_combinations(remaining_string+k+1, str, remain_depth - 1);
    }
    return;
}

int main(int argc, char **argv)
{
    if(argc<3) return 1;
    expand_combinations(argv[1], "", atoi(argv[2]));
    return 0;
}