我有5個包含字符串的列表:append,word,middle,combo,prepend。 (或者s0,s1,s2,s3,s4)。 每個列表在程序啓動時可以隨機包含0到256個字符串。C/C++如何組合多個數組/字符串列表?
如何輸出所有可能的組合?
我嘗試了for()循環的級聯,但是如果中間的列表包含0個字符串(例如s2),則會失敗。
我有5個包含字符串的列表:append,word,middle,combo,prepend。 (或者s0,s1,s2,s3,s4)。 每個列表在程序啓動時可以隨機包含0到256個字符串。C/C++如何組合多個數組/字符串列表?
如何輸出所有可能的組合?
我嘗試了for()循環的級聯,但是如果中間的列表包含0個字符串(例如s2),則會失敗。
我假設你使用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。
我希望它有幫助!
爲什麼不直接放一個if來檢查列表是否爲空?
我用你的例子假設你想要置換的話在一個陣列
而且因爲C++被標記,我寧願(使用string
vector
)
#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!
使用'sprintf',但問題不是很清楚。 –
可能它失敗了,因爲你不處理一個角落的情況。請發佈您的代碼,以便我們可以看到您做錯了什麼。 – Caladan
5個字符串列表或5個字符串列表? – P0W