C++ 生成子串

C++ 生成子串,c++,algorithm,substring,C++,Algorithm,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]=s

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

  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]<<' ';
        }
  }
cin>>N;
字符串str;
cin>>str;
llm=N*(N+1)/2;
字符串*sub=新字符串[m];
int k=0;

对于(inti=1,k=0;i您对
k
的增量太大了:

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

请避免使用新的std::string并查找std::string::substr
string*sub=new string[m];
=>
std::vector sub(m);
Thanx有关帮助,我刚刚开始编写代码,所以我不知道vector,但我会尝试再次了解它
for(int i=1,k=0; i<=N; i++,k++) // <==
{
    for(int j=0; j+i<=N; j++,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));
    }
}