我正在尝试使用std::transform编辑字符串以输出以下内容:

a
bcd
efghi
jklmnop
qrstuvwxy
z{abcdefghi
jklmnopqrstuv
wxyz{abcdefghij
klmnopqrstuvwxyz{
abcdefghijklmnopqrs
tuvwxyz{abcdefghijklm
nopqrstuvwxyz{abcdefghi
jklmnopqrstuvwxyz{abcdefg


我的转换二进制运算函数具有2个不同类型的参数(string和size_t)。这样做有效/可行吗?我也通过引用传递了第二个arg,因此我可以更改/增加它,这是否有效/可行?

我是否应该更改间歇方式并使用与名称空间algorithm不同的功能来实现这一目标?也许shuffle,是否有
void solution1()
{
    // Easy solution

    std::string testStr = "abcdefghijklmnopqrstuvwxyz{";
    size_t index = 1;

    while (index < testStr.length()) {

        std::string back  = testStr.substr(0, index);
        std::string front = testStr.substr(index, std::string::npos);

        testStr = front + back;
        index += 2;
        std::cout << back << std::endl;
    }
}

// anyway to initialise gIndex to 1?
std::string outputOddGroup(std::string str, size_t& gIndex)
{
    // Is there a better way to split and rebuild the string?
    std::string back  = str.substr(0, gIndex);
    std::string front = str.substr(gIndex, std::string::npos);

    gIndex += 2;
    std::cout << back << std::endl;
    return front + back;
}

void solution2()
{
    std::string testStr = "abcdefghijklmnopqrstuvwxyz{";
    std::transform(testStr.begin(), testStr.end(), testStr.begin(), outputOddGroup);
}

最佳答案

我不确定我是否完全了解您的需求,但是此解决方案如何:

#include <iostream>
#include <string>
#include <algorithm>

int main()
{
    std::string testStr = "abcdefghijklmnopqrstuvwxyz{";
    for(size_t i = 0; i < 13; ++i)
    {
        std::cout << testStr.substr(0, i*2 + 1) << "\n";
        std::rotate(testStr.begin(), testStr.begin() + i*2 + 1, testStr.end());
    }
    return 0;
}


我已经使用了13次迭代只是为了模仿您的原始输出,因此您可以将其更改为所需的任何数字。

关于c++ - 转换具有不同参数类型的二进制运算函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29690706/

10-16 19:15