我没有得到我想要的 substr

I don't get what I want with substr

我想获得所有可能的子字符串,有以下代码(包括所有库),其中 n 是字符串 s 的长度:

long substrCount(int n, string s) {
    string sub;
    vector<string> s2;
    for(int i = 0; i<n; ++i){
        for(int j = 0; j <= n-i; j++){
            sub = s.substr(i,j);
            if(sub != "")
                s2.push_back(sub);
        }
}

但是当我尝试使用主字符串“asasd”时,我得到

> s2
> ={a,as,asa,asas,asasd,a,as,asa,asas,asasd,s,sa,sas,sasd,a,as,asa,asas,asasd,s,sa,sas,sasd,a,as,asd,a,as,asa,asas,asasd,s,sa,sas,sasd,a,as,asd,s,sd,a,as,asa,asas,asasd,s,sa,sas,sasd,a,as,asd,s,sd,d}

我不明白为什么,索引i是从0到n。我应该在第一个 asasd 之后以 's' 开头的字符串。

因为首先将 i 固定为 0 并遍历整个 j-based 循环,然后将 i 递增到 1 和 re-do 基于 j 的循环,依此类推... 您可以使用调试器轻松检查。

因为您在问题中没有提供足够的细节。我可以为您提供替代方案。对于这个例子,我不使用 vector

例如:

#include <iostream>
#include <string>


void subString(std::string, int);


int main()
{
    std::string s2 = "asad";
    subString(s2, s2.length());
    return 0;
}

void subString(std::string s, int n)
{

    for (int i = 0; i < n; i++)
    {
        for (int j = 1; j <= n - i; j++)
            std::cout << s.substr(i, j) << std::endl;
    }
        
           
}

输出:

a
as
asa
asad
s
sa
sad
a
ad
d