【发布时间】:2019-04-05 13:01:18
【问题描述】:
我正在编写一个返回字符串的函数。但是奇怪的事情发生了。 result 字符串的输出被控制台打印为意外。
根据机器(TESTED),它变成中文或其他内容或 EMPTY STRING。但这仅在输入字符串超长时才会发生。它通常适用于较小的字符串。
有没有更好的方法将char 附加到字符串?这是因为我怀疑问题是由我将字符添加到字符串末尾的方式引起的。
从控制台
来自调试器
main.cpp
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool checkPalindrome(string s)
{
return (s == std::string(s.rbegin(), s.rend()));
}
string longestPalindrome(string s)
{
if (s.size() > 1000 || s.empty())
return "";
string result = "";
string sub = "";
char* ptr = &sub[0];
for (int i = 0; i < s.length(); ++i) {
sub += s[i];
while (true) {
string temp = ptr;
if (checkPalindrome(temp)) {
ptr = &sub[0];
if (temp.length() > result.length()) {
result = temp;
break;
}
break;
}
else {
ptr++;
}
if (ptr == &sub[sub.length()-1]) {
ptr = &sub[0];
break;
}
}
}
std::cout << "end of function" << std::endl;
return result;
}
int main()
{
string output = longestPalindrome("babaddtattarrattatddetartrateedredividerb");
std::cout << output << std::endl;
return 0;
}
【问题讨论】:
-
这不会编译,因为
output是main中的一个局部变量,但是您以某种方式在longestPalindrome中访问它。请发布实际的编译代码。 -
为什么不
for (auto character : s) -
@Blaze 对此感到抱歉。我只是想使用相同的 vairbale 名称进行 aovid,然后将函数
longestPalindrome中的局部变量output更改为result。我更新了帖子 -
string sub = ""; char* ptr = &sub[0];这不会导致UB吗? -
&sub[0]在空字符串上不是 UB:eel.is/c++draft/strings#string.access-1