C ++字符串 - 如何用两个字符交换字符串?

时间:2010-10-13 19:17:51

标签: c++

给定一个C ++字符串str(“ab”),如何交换str的内容使其变为“ba”?

这是我的代码:

string tmpStr("ab");

const char& tmpChar = tmpStr[0];
tmpStr[0] = tmpStr[1];
tmpStr[1] = tmpChar;

有更好的方法吗?

6 个答案:

答案 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");