我想知道是否這種反轉字符串的方式是安全的?這樣倒轉字符串是否安全?
void ReverseString(std::string & stringToReverse)
{
stringToReverse.assign(stringToReverse.rbegin(), stringToReverse.rend());
}
我想知道是否這種反轉字符串的方式是安全的?這樣倒轉字符串是否安全?
void ReverseString(std::string & stringToReverse)
{
stringToReverse.assign(stringToReverse.rbegin(), stringToReverse.rend());
}
根據§21.4.6.3/ 20,assign(first,last)
(迭代器first
和last
)等效於
assign(string(first,last))
因此,它首先創建一個新的字符串對象,然後分配給它。當你仍然複製時(如果這是你所害怕的),你從中複製的字符串(反向)將不會被修改。
然而,使用其他人建議的std::reverse(begin(str),end(str))
更好,可能更有效。
我不知道這是否有你的代碼審查的請求,或者你不知道其他的選擇,但你應該只使用std::reverse
從<algorithm>
std::string str = "Hello world!";
std::reverse(str.begin(), str.end());
這種挫折字符串就位。如果你想創建一個新的字符串,你基本上做什麼,你必須使用你assign()
代碼,但與std::string
構造:
std::string reversed(str.rbegin(), str.rend());
正如其他人所建議的那樣,事實上,您所做的是顛倒了char
序列。 這實際上顛倒了串事實上取決於什麼概念「反向」和「串」和「焦炭」的意思是。
std::string
是一個長度爲8位(至少在大多數平臺上)的char
的序列。 日文字符串(但是即使是法文或意大利文或德文)也可以包含0..127範圍之外的代碼點,因此需要進行編碼以表示爲8位字符,因此「字符」可能會保留超過1 char
。以相反的順序放置char
不會顛倒文本,它只是完全搞砸了。
假設1 character <=> 1 char
僅適用於純ASCII文本。
使用'std :: reverse()'有什麼問題嗎? – Aesthete
它只是沒有發生在我身上:) – qdii