使用c++,为什么我不能返回新的字符串作为方法
Reverse String (Leetcode) Using C++, Why I cannot return the new string as method
问题:写一个函数,接受一个字符串作为输入,并返回反转后的字符串
示例:给定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
。
当然,这并不是一个特别有效的方法来反转字符串的内容。但这是解决这个入门任务的一个很好的第一次尝试。
相关文章:
- 有哪些有效的方法可以消除一组 100 万个字符串>重复数据?
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 具有字符串化的可变参数宏的现代/通用方法
- 接收字符串并使用它来调用方法C++
- 如何分隔字符串并将标记传递给方法
- 是否有通用方法可以找到任何以 null 结尾的字符串的长度?
- 当映射包含字符串向量作为值时,从值中获取键的有效方法
- 在 C++11 中字符串化变量名称的替代方法
- 连接和压缩标准::vector<std::字符串的最佳方法>
- Esp8266 & Nodemcu:返回请求字符串的方法
- 将位字符串转储到二进制文件的最佳方法是什么
- 有没有一种 STL 方法可以找到字符串的所有排列,给出一个以 C++ 为单位的大小?
- 如何将字符串从 C++/CLI 方法返回到调用它的非托管C++
- 返回混合 \ 和 / 的文件系统路径字符串方法
- VS 链接器失败,标准::字符串方法出现"object already exists"错误
- Lua:为自定义用户数据提供一个字符串方法
- 语法错误字符串方法C++
- 返回原始子字符串的子字符串方法
- 为什么我不能在C++中使用这种方法与"char"而不是"字符串"方法?
- 如何使c++字符串函数的行为像Java和c#字符串方法