c ++有效地获取带索引的字符串子串

Krc*_*n U 2 c++ substr c++11

在我的项目中,我必须迭代从index = 0开始的大字符串并获得长度k substring.我已经实现了string :: substr()并想知道是否还有其他有效的方法.

例如 :

std::string S ="ABCDEFGHIJKLMN"
Run Code Online (Sandbox Code Playgroud)

我需要得到长度= 5的所有子从S.Just像年初开始 "ABCDE","BCDEF","CDEFG"等..

我的实现如下:

    void geekfunc(std::string &str)
{
    unsigned int index=0;
    for (; index<=(str.size()-K);++index)
    {
        ++myseqmap[str.substr(index,K)];
    }
}
Run Code Online (Sandbox Code Playgroud)

这个功能被称为千万次,我欢迎其他方法尝试.

Jos*_*son 5

如果您使用的是C++ 17,则可以将其string_view用作参数和映射键类型.这样,每次调用时都不会复制字符串内容substr.只需确保传递给函数的字符串在地图仍在使用时不会被销毁或修改.

std::map<std::string_view, std::size_t> myseqmap;

void geekfunc(std::string_view str)
{
    unsigned int index=0;
    for (; index<=(str.size()-K);++index)
    {
        ++myseqmap[str.substr(index,K)];
    }
}
Run Code Online (Sandbox Code Playgroud)