2010-09-25 2 views
-3
#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?Как изменить этот код?

+0

Не можете найти более подробную информацию? Что ты хочешь делать? Почему вы хотите удалить ostringstream? – fschmitt

+0

Что вы можете использовать? если вам запрещено использовать 'ostringstream'? – Dummy00001

+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; 
} 
+0

Что именно вы имеете в виду при реорганизации кода? Вы уже видите что-то, что можно оптимизировать? –

Смежные вопросы