我试图生成fun这个词的所有子串。
但它打印" un"两次,我不知道为什么。
int c, i;
string s = "fun";
for (c = 0; c < s.length(); c++)
{
for (i = c+1; i <= s.length(); i++)
{
string d = s.substr(c, i);
cout << d << endl;
}
}
答案 0 :(得分:1)
substr
的第二个参数是长度,而不是子字符串的结尾index
。
您可以使用以下逻辑获取所有子字符串:
0
开始,选择长度为1
的子字符串,然后选择长度为2
的子字符串,然后选择3
,依此类推然后转到索引1
并对其执行相同操作,依此类推。 (在索引1
时,如果是2
,则字符串的剩余长度为fun
,因此我们必须运行循环直到2
})
string s = "fun";
for (int c = 0; c < s.length(); c++)
{
for (int i = 1; i <= s.length() - c; i++)
{
string d = s.substr(c, i);
cout << d << endl;
}
}
答案 1 :(得分:0)
但它打印“un”两次,我不知道为什么。
你可以找到为什么如果你打印c和我
...
for (i = c+1; i <= s.length(); i++)
{
cout << "c,i: " << c << i << endl; // add this line to debug !
string d = s.substr(c, i);
...
输出:
c,i: 01
f
c,i: 02
fu
c,i: 03
fun
c,i: 12
un
c,i: 13
un
c,i: 23
n
请注意,如果 i 比字符串中的其余字符长,则 c 之后,substr将只添加尽可能多的char,{{3} }
要包含在子字符串中的字符数(如果字符串更短,则使用尽可能多的字符)。