Witam,
mój problem jest dość prozaiczny. Mam tablice char**, w której zapisane są poszczególne znaki np:
Witam,
mój problem jest dość prozaiczny. Mam tablice char**, w której zapisane są poszczególne znaki np:
#include <vector>
#include <string>
#include <iostream>
typedef std::vector<std::string> MyTab;
void swinka(const MyTab & tab, std::string & stack, size_t level)
{
for(char c : tab[level])
{
stack += c;
if( level + 1 < tab.size() )
swinka(tab, stack, level + 1);
else
std::cout << stack << std::endl;
stack.pop_back();
}
}
void swinka(const MyTab & tab)
{
std::string stack;
if( !tab.empty() )
swinka(tab, stack, 0);
}
int main()
{
MyTab my_tab = {"asdf", "zxcv", "klp", "rtuiop"};
swinka(my_tab);
}
$ clang++ -o swinka -std=c++11 swinka.cpp
$ ./swinka | head -n 5
azkr
azkt
azku
azki
azko
$ ./swinka | wc -l
288
Dzięki A gdyby to tak przenieść do starszego standardu? Niestety nie mogę wykorzystać C++11 Wymyśliłem taki kod, jednak zawiesza się:
#include <iostream>
#include <string>
#include <list>
using namespace std;
char rozw[2][9];
int size =0;
string stack;
void kombinuj(const char **tab, int level){
const char *str = tab[level];
cout << str;
int i=0;
do{
cout << "--" << str[i] << "--" << endl;
stack += str[i];
if(level<size){
kombinuj(tab, level+1);
}
i++;
cout << "Stack: " << stack << endl;
stack.clear();
}while(str[i]!= '\0');
}
void fun(list<string> tab){
size = tab.size();
cout << "Rozmiar: " << size << endl;
const char **c = new const char*[size];
int i = 0;
for (list<string>::iterator iter = tab.begin(); iter != tab.end(); iter++, i++){
cout << *iter << endl;
c[i] = new char[iter->length()];
c[i] = iter->c_str();
}
cout << "START" << endl;
kombinuj(c, 0);
}
int main(){
list<string> tab;
tab.push_back("abc");
tab.push_back("xyz");
tab.push_back("klo");
fun(tab);
return 0;
}