>>41
(文字数-1)個ある、「隙間」ごとにスペースが入るか否かだから、
(文字数-1)桁の2進数と対応付ける。ただし文字数が多いとオーバーフローする。
# include <iostream>
# include <cstring>

int main(int, char **argv)
{
    const char *const str = argv[1];
    if(!str)
        return 1;
    const std::size_t len = std::strlen(str);
    for(unsigned long c = 0; c < (1ul << len-1); c++)
    {
        for(std::size_t i = 0; i < len; i++)
        {
            std::cout << str[i];
            if(c & (1ul << i)) std::cout << ' ';
        }
        std::cout << '\n';
    }
}

>>42
コンパイル時に文字数がわかるかどうかって事じゃないか?