生成子串

Generating Substring

我正在尝试生成所有子字符串并将其存储在动态分配的字符串数组中,如下所示:

  cin>>N;
  string str;
  cin>>str;
  ll m=N*(N+1)/2;
  string *sub = new string[m];
  int k=0;
  for(int i=1,k=0; i<=N; i++,k++)
  {
      for(int j=0; j+i<=N; j++,k++)
        {
         sub[k]=str.substr(j,i);
         cout<<sub[k]<<' ';
        }
  }

但是下面的代码在生成所有大小为 3 的字符串后出错

但是当我打印所有子字符串而不是存储字符串时,代码会给出所需的输出。(按照以下代码)

cin>>N;
  string str;
  cin>>str;
  ll m=N*(N+1)/2;
  string *sub = new string[m];
  int k=0;
  for(int i=1,k=0; i<=N; i++,k++)
  {
      for(int j=0; j+i<=N; j++,k++)
        {
         cout<<str.substr(j,i);
        }
  }

请帮忙??

k 的递增过多:

for(int i=1,k=0; i<=N; i++,k++) // <==
{
    for(int j=0; j+i<=N; j++,k++)
    {

你只想在每次向数组添加内容时递增 k,这只发生在内部循环中。按原样,您在每个主要循环中都进行了额外的增量,因此您离开了数组的末尾。

要避免此问题,您可以这样做:

std::vector<std::string> subs;
subs.reserve(m);
for (int i=1; i<=N; ++i) {
    for (int j=0; i+j<=N; ++j) {
        subs.push_back(str.substr(j, i));
    }
}