问题是关于leetcode 344. Reverse String
class Solution {
public:
string reverseString(string s) {
char *array = new char[s.length()];
for(int i=0;i<s.length();i++)
{
array[i] =s[s.length()-i-1];
}
string strlist(array);
printf("%s\n",strlist.c_str());
return strlist;
}
};
输入是“我真的看到了爱神。” 输出是“。我是以前看过eroSnam A \”的“。”
似乎我的数组有比我预期更多的元素,而且我不知道如何避免这种情况,任何人都可以建议?
答案 0 :(得分:4)
您忘记使用空字符终止C样式字符串。还记得delete[]
已分配的数组。
string reverseString(string s) {
char *array = new char[s.length() + 1];
// ^^^
for(int i=0;i<s.length();i++)
{
array[i] =s[s.length()-i-1];
}
array[s.length()] = 0; // Terminate the string
string strlist(array);
printf("%s\n",strlist.c_str());
delete [] array; // Don't forget
return strlist;
}
还有一些巧妙的方法:
std::string t(s);
std::reverse(t.begin(), t.end());
return t;
或者:
return std::string(s.rbegin(), s.rend());