在c++中生成子字符串
Generating substrings in c++
我正在尝试生成单词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;
}
}
substr
的第二个参数是length,而不是子字符串的结束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; } }
如果你输出c和I,你就会知道为什么了但是它打印了两次"un",我不知道为什么。
...
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比字符串中的剩余字符长,则substr将在c之后添加尽可能多的字符,如http://www.cplusplus.com/reference/string/string/substr/
子字符串中包含的字符数(如果字符串较短,则使用尽可能多的字符)。