2013-08-26 3 views
-1

У меня есть 5 списков, содержащих строки: append, word, middle, combo, preend. (или 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

Почему бы просто не поставить, если проверить, пуст ли пуст или нет?

0

Я предполагаю, что с вашим примером, что вы хотите, чтобы переставить слова в массиве

И так как C++ помечен, я предпочитаю следующее (с использованием vector из string)

#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!

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