所以我在网站上找了一个有类似问题的人,但什么都没有出现,这让我很困惑。
#include <iostream>
#include <string>
using namespace std;
string reverse(string s)
{
int start = 0;
for(int i = 0; i < s.length(); i++)
{
if(s[i]==' '){
string new_word = s.substr(start,i);
cout << new_word << endl;
start = i+1;
}
}
return "hi";
}
int main(){
cout << reverse("Hey there my name is am");
return 0;
}
当我运行上面的代码时,这就是我得到的输出。
Hey
there my
my name is
name is am
is am
hi
你可以看到if条件似乎并没有在每个空间中断。我也尝试了isspace(s [i])并产生了与上面相同的结果。我不能为我的生活弄清楚为什么在某些白色空间而不是其他空间上跳过if条件。有没有人遇到过类似的问题?
答案 0 :(得分:1)
查看string::substr的参考资料。它明确指出len
将字符数包含在子字符串中。在您的代码中,您传递的' '
索引完全错误,因为它与len
不对应。不要使用s.substr(start,i)
,只需使用s.substr(start,i - start + 1)
即可。这应该可以解决问题。