【发布时间】:2022-11-14 05:25:04
【问题描述】:
问题是反转字符串中的单词...
Eg. - This is Nice
Output -Nice is This
所以这是错误
terminate called after throwing an instance of 'std::length_error'
what(): basic_string::_M_create
这是我的实际代码,不知道哪里出错了我刚开始使用 c++,但我确定我正在尝试访问未定义的索引。如果我错了,请纠正我
string reverseWords(string s) {
vector<string> v;
string x="";
for(int i=0;i<s.size();i++)
{
if(isspace(s[i]))
{
v.push_back(x);
x="";
v.push_back(" ");
}
else
{
x=x+s[i];
}
}
v.push_back(x);
x="";
for(int j=v.size();j>=0;j--) x=x+v[j];
return x;
}
【问题讨论】:
-
在
for(int j=v.size();j>=0;j--) x=x+v[j];的第一次迭代中,j的值是多少,向量中有多少个元素?你说行不行? -
供参考 - 问题是反转字符串中的单词-- 只需一个简单的
std::stack和std::stringstream即可解决此问题。 -
您用来学习 C++ 的 C++ 教科书章节的主题是什么,这个练习题来自哪里?显然,为了完成此编码任务,您应该使用本章讨论的任何主题,有必要了解这一点以便为您指明正确的方向。
-
至于我的建议,
std::stringstream会自动找出空格的位置,因此您无需编写代码来执行此操作。仅此一项就可以消除您拥有的大部分错误代码。 -
最后的循环超出了向量的范围,即未定义的行为.您需要在
v.size()-1开始循环,但如果向量为空则要小心。使用反向迭代器迭代向量将是更好的选择。
标签: c++ string algorithm reverse function-definition