2013-08-26 65 views
-1

我有5個包含字符串的列表:append,word,middle,combo,prepend。 (或者s0,s1,s2,s3,s4)。 每個列表在程序啓動時可以隨機包含0到256個字符串。C/C++如何組合多個數組/字符串列表?

如何輸出所有可能的組合?

我嘗試了for()循環的級聯,但是如果中間的列表包含0個字符串(例如s2),則會失敗。

+0

使用'sprintf',但問題不是很清楚。 –

+1

可能它失敗了,因爲你不處理一個角落的情況。請發佈您的代碼,以便我們可以看到您做錯了什麼。 – Caladan

+0

5個字符串列表或5個字符串列表? – P0W

回答

1

我假設你使用std::vector<string> s1,s2,s3,s4,s5;
如果你喜歡醜陋的代碼:

int i = 1; 
for (auto itr1 = s1.begin(), end1 = s1.end(); itr1 != end1; ++itr1) 
    for (auto itr2 = s2.begin(), end2 = s2.end(); itr2 != end2; ++itr2) 
     for (auto itr3 = s3.begin(), end3 = s3.end(); itr3 != end3; ++itr3) 
      for (auto itr4 = s4.begin(), end4 = s4.end(); itr4 != end4; ++itr4) 
       for (auto itr5 = s5.begin(), end5 = s5.end(); itr5 != end5; ++itr5) 
        std::cout<<"solution "<<i++<< ": "<< *itr1 << " - " << *itr3<< " - " << *itr4<< " - " << *itr5 <<std::endl; 

它不是優雅,但不會失敗時sX.size()== 0。

我希望它有幫助!

0

爲什麼不直接放一個if來檢查列表是否爲空?

0

我用你的例子假設你想要置換的話在一個陣列

而且因爲C++被標記,我寧願(使用stringvector

#include <algorithm> 
#include <string> 
#include <iostream> 
#include <vector> 
#include <iterator> 

int main() 
{ 

    std::vector <std::string> v ={ "append", "word", 
         "middle", "combo", "prepend"}; 

    //Use v.push_back to add any number of strings 

    std::sort(v.begin(), v.end()); 
    do { 
     std::copy(v.begin(), v.end(), 
        std::ostream_iterator<std::string>(std::cout, " ")); 
     std::cout<<std::endl; 
    } while(std::next_permutation(v.begin(), v.end())); 
} 

和我下面敢肯定,你已經知道,256字符串你要等到256!