2010-09-25 9 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; 
} 

Comment ce code peut-il être modifié afin qu'il n'utilise pas ostringstream?Comment changer ce code?

+0

Pourriez-vous donner plus d'informations? Qu'est-ce que tu veux faire? Pourquoi voulez-vous supprimer l'ostringstream? – fschmitt

+0

Qu'est-ce que vous êtes autorisé à utiliser? si vous n'êtes pas autorisé à utiliser 'ostringstream'? – Dummy00001

+0

Est-ce que ce sont les devoirs? –

Répondre

2

Ce qui suit est votre code avec une chaîne à la place d'ostringstream. Normalement, je refactoriserais le code mais comme ta question était assez précise, je la laisserai tranquille.

#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

Que voulez-vous dire par refactoriser le code? Avez-vous déjà vu quelque chose qui peut être optimisé? –