如何在反向字符串时初始化数组

时间:2018-05-14 02:03:38

标签: c++

问题是关于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 \”的“。”

似乎我的数组有比我预期更多的元素,而且我不知道如何避免这种情况,任何人都可以建议?

1 个答案:

答案 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());