我正在尝试使用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/