#include <iostream>
#include <string>
#include <algorithm>
int main()
{
std::string s = "abcdefg";
int n = s.size();
for (int i = 0; i < n; i )
{
for (int j = n; j > i; j--)
{
std::cout << s.substr(i,j) << std::endl;
}
}
}
I want to output substring from abcdefg, abcdef,... a,
then, bcdefg, bcdef...b,
.
However, the result shows it is repeated in some part, for example, cdefg
repeated three times in my result, why and how to correct it?
CodePudding user response:
The 2nd parameter of substr
is supposed to be count, i.e. the length of the substring, so change
std::cout << s.substr(i,j) << std::endl;
to
std::cout << s.substr(i,(j-i)) << std::endl;
CodePudding user response:
The reason this is happening is because j
is always being set to n
. You are telling substr
to give you n
counts past i
which is not what you want. You want from i
to the end of the string and then decrease from there.
Change from for (int j = n; j > i; j--)
to for (int j = (n - i); j > 0; j--)