2015-06-11 23 views
0

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

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); 
     } 
    } 

请帮助?

+2

请避免新的std :: string和查询的std :: string :: SUBSTR –

+0

'字符串*分=新的字符串[M]。 '=>'std :: vector sub(m);' –

回答

0

你的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)); 
    } 
} 
+0

Thanx的帮助,我刚刚开始编码,所以我不知道矢量,但我会尝试去了解它。再次感谢 –