给定一个C ++字符串str(“ab”),如何交换str的内容使其变为“ba”?
这是我的代码:
string tmpStr("ab");
const char& tmpChar = tmpStr[0];
tmpStr[0] = tmpStr[1];
tmpStr[1] = tmpChar;
有更好的方法吗?
答案 0 :(得分:17)
像这样:
std::swap(tmpStr[0], tmpStr[1]);
std::swap
位于<algorithm>
。
答案 1 :(得分:6)
如果你想要一把大锤用于这个坚果:
#include <algorithm>
using namespace std;
string value("ab");
reverse(value.begin(), value.end());
这个可能对涉及“abc”的后续问题很有用,但对于双元素情况,swap
是首选。
答案 2 :(得分:2)
当然,正如GMan指出的那样,std :: swap在这里是正确的。但是,让我用你的代码解释这个问题:
string tmpStr("ab");
const char& tmpChar = tmpStr[0];
tmpStr[0] = tmpStr[1];
tmpStr[1] = tmpChar;
tmpChar实际上是对tmpStr [0]的引用。所以,这将会发生:
| a | b | (initial content, tmpChar refers to first character)
| b | b | (after first assignment)
注意,由于tmpChar引用了第一个字符,它现在的计算结果为'b',而第二个赋值则没有任何效果:
| b | b | (after second assignment)
如果删除&amp;并使tmpChar成为一个实际的字符变量,它会起作用。
答案 3 :(得分:2)
看看这个:)
tmpStr[0] ^= tmpStr[1];
tmpStr[1] ^= tmpStr[0];
tmpStr[0] ^= tmpStr[1];
说明:
The XOR operator has the property: (x^y)^y = x
Let's we have a,b:
1 => a^b,b
2 => a^b,b^a^b=a
3 => a^b^a=b,a
The result is b,a.
答案 4 :(得分:0)
如果您需要逐个获取字符,请使用反向迭代器,如图所示here
// string::rbegin and string::rend
#include <iostream>
#include <string>
using namespace std;
int main ()
{
string str ("now step live...");
string::reverse_iterator rit;
for ( rit=str.rbegin() ; rit < str.rend(); rit++ )
cout << *rit;
return 0;
}
hth
马里奥
答案 5 :(得分:-2)
怎么样:
std::string s("ab");
s[0] = 'b';
s[1] = 'c';
或者
std::string s("ab");
s = std::string("bc");