使用c++,为什么我不能返回新的字符串作为方法

Reverse String (Leetcode) Using C++, Why I cannot return the new string as method

本文关键字:字符串 方法 返回 c++ 为什么 不能 使用      更新时间:2023-10-16

问题:写一个函数,接受一个字符串作为输入,并返回反转后的字符串

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

这段代码有什么问题?

class Solution {
public:
    string reverseString(string s) {
        string s2;
        for(int i=0; i<s.length(); i++)
            s2[i] = s[s.length()-1-i];
        return s2;
    }
};

访问权限超出限制,必须在赋值前调整结果字符串的大小

std::string reverseString(const std::string& s) {
    std::string s2(s.size(), '');
    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()};
}

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

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

试图使用[]操作符访问字符串的内容,将访问该字符串中现有的字符。如果它不存在,它不会创建一个。

即使代码执行没有出现这种未定义的行为,在循环的下一次迭代中也会尝试将s2[1]设置为某个字符。s2[1]不存在,s2[0]也不存在。等等......未定义的行为。崩溃。

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

当然,这并不是一个特别有效的方法来反转字符串的内容。但这是解决这个入门任务的一个很好的第一次尝试。