如何将反转的字符串另存为新字符串?

How to save a reversed string as a new string?

本文关键字:字符串 另存为      更新时间:2023-10-16

我正在尝试制作一个回文检查器。因此,为了解决这个问题,我想我将原始字符串与反向字符串进行比较。但是,如何在不覆盖旧字符串的情况下保存反转的字符串?

reverse(myString.begin(), myString.end())会反转我的字符串,但它取代了 myString,并且执行string reversedString = reverse(myString.begin(), myString.end());不起作用。这是我到目前为止所拥有的:

int main()
{
cout << "Enter a string: ";
string myString;
getline(cin, myString);
cout << endl;
string reversedString = reverse(myString.begin(), myString.end());
cout << reversedString;
return 0;
}

使用反向迭代器创建新字符串:

string reversedString(myString.rbegin(), myString.rend());

此外,通过使用标准算法和反向迭代器,您可以这样做(自C++14(

const bool is_palindrome = std::equal(myString.begin(), myString.end(),
myString.rbegin(), myString.rend()));
如何在

不覆盖旧字符串的情况下保存反转的字符串?

std::string同时具有复制构造函数和复制赋值运算符,使这两种方法成为可能:

std::string reversedString(myString); // copy constructor
// or
std::string reversedString;
reversedString = myString;            // copy assignment
// finally
std::reverse(reversedString.begin(), reversedString.end());

正如其他人所指出的,可以使用迭代器构建std::string。通过使用myString反向迭代器rbegin()rend()构造新字符串,您可以直接创建反向字符串,而无需调用std::reverse

std::string reversedString(myString.rbegin(), myString.rend());

对于手头的任务,要确定它是否是回文,您不需要上述任何一项。只需比较myStringbegin()到字符串中间的rbegin()字符:

bool is_palindrome = 
std::equal(myString.begin(), 
std::next(myString.begin(), str.size() / 2U),
myString.rbegin()
);

只需在反转字符串之前复制字符串:

string reversedString = myString;
reverse(reversedString.begin(), reversedString.end()); // reverse is now done on the copy