问题:编写一个以字符串作为输入并返回字符串反转的函数。
示例:给定s ="你好",返回" olleh"。
这段代码有什么问题?
{{1}}
答案 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()};
}