反向字符串(Leetcode)使用C ++,为什么我不能将新字符串作为方法返回

时间:2016-08-15 00:30:05

标签: c++ arrays pointers

问题:编写一个以字符串作为输入并返回字符串反转的函数。

示例:给定s ="你好",返回" olleh"。

这段代码有什么问题?

{{1}}

2 个答案:

答案 0 :(得分:2)

因为循环的第一次迭代尝试将s2[0]设置为原始字符串的最后一个字符。

问题在于没有s2[0]s2字符串完全为空。 s2字符串本质上是一个空数组。

尝试使用[]运算符访问字符串的内容,可访问该字符串的 现有 字符。如果它不存在,它就不会创建一个。

即使代码执行幸免于此未定义的行为,在循环的下一次迭代中,也会尝试将s2[1]设置为某个字符。 s2[1]不存在,只有s2[0]。等等。未定义的行为。崩溃。

只需使用push_back()将每个字符添加到s2,而不是设置空字符串的不存在值。

当然,这并不是一种特别有效的方法来扭转字符串的内容。但这是处理这项介绍性任务的第一次尝试。

答案 1 :(得分:2)

您已超出绑定访问权限,您必须在分配之前调整结果字符串的大小。

std::string reverseString(const std::string& s) {
    std::string s2(s.size(), '\0');

    for(int i=0; i<s.length(); i++)
        s2[i] = s[s.length()-1-i];

    return s2;
}

或者只是使用正确的构造函数:

std::string reverseString(const std::string& s) {
    return {s.rbegin(), s.rend()};
}