我没有得到我想要的 substr
I don't get what I want with substr
我想获得所有可能的子字符串,有以下代码(包括所有库),其中 n 是字符串 s 的长度:
long substrCount(int n, string s) {
string sub;
vector<string> s2;
for(int i = 0; i<n; ++i){
for(int j = 0; j <= n-i; j++){
sub = s.substr(i,j);
if(sub != "")
s2.push_back(sub);
}
}
但是当我尝试使用主字符串“asasd”时,我得到
> s2
> ={a,as,asa,asas,asasd,a,as,asa,asas,asasd,s,sa,sas,sasd,a,as,asa,asas,asasd,s,sa,sas,sasd,a,as,asd,a,as,asa,asas,asasd,s,sa,sas,sasd,a,as,asd,s,sd,a,as,asa,asas,asasd,s,sa,sas,sasd,a,as,asd,s,sd,d}
我不明白为什么,索引i是从0到n。我应该在第一个 asasd 之后以 's' 开头的字符串。
因为首先将 i 固定为 0 并遍历整个 j-based 循环,然后将 i 递增到 1 和 re-do 基于 j 的循环,依此类推...
您可以使用调试器轻松检查。
因为您在问题中没有提供足够的细节。我可以为您提供替代方案。对于这个例子,我不使用 vector
例如:
#include <iostream>
#include <string>
void subString(std::string, int);
int main()
{
std::string s2 = "asad";
subString(s2, s2.length());
return 0;
}
void subString(std::string s, int n)
{
for (int i = 0; i < n; i++)
{
for (int j = 1; j <= n - i; j++)
std::cout << s.substr(i, j) << std::endl;
}
}
输出:
a
as
asa
asad
s
sa
sad
a
ad
d
我想获得所有可能的子字符串,有以下代码(包括所有库),其中 n 是字符串 s 的长度:
long substrCount(int n, string s) {
string sub;
vector<string> s2;
for(int i = 0; i<n; ++i){
for(int j = 0; j <= n-i; j++){
sub = s.substr(i,j);
if(sub != "")
s2.push_back(sub);
}
}
但是当我尝试使用主字符串“asasd”时,我得到
> s2
> ={a,as,asa,asas,asasd,a,as,asa,asas,asasd,s,sa,sas,sasd,a,as,asa,asas,asasd,s,sa,sas,sasd,a,as,asd,a,as,asa,asas,asasd,s,sa,sas,sasd,a,as,asd,s,sd,a,as,asa,asas,asasd,s,sa,sas,sasd,a,as,asd,s,sd,d}
我不明白为什么,索引i是从0到n。我应该在第一个 asasd 之后以 's' 开头的字符串。
因为首先将 i 固定为 0 并遍历整个 j-based 循环,然后将 i 递增到 1 和 re-do 基于 j 的循环,依此类推... 您可以使用调试器轻松检查。
因为您在问题中没有提供足够的细节。我可以为您提供替代方案。对于这个例子,我不使用 vector
例如:
#include <iostream>
#include <string>
void subString(std::string, int);
int main()
{
std::string s2 = "asad";
subString(s2, s2.length());
return 0;
}
void subString(std::string s, int n)
{
for (int i = 0; i < n; i++)
{
for (int j = 1; j <= n - i; j++)
std::cout << s.substr(i, j) << std::endl;
}
}
输出:
a
as
asa
asad
s
sa
sad
a
ad
d