大家好,我正面临一个简单的 C++ 交换问题(两个字符串)。我无法交换到 work.My 输出只有 "splendid day"

Hi everyone, I`m sitting with a simple swap issue in C++ (two strings). I cant get my swap to work.My output is only "splendid day"

#include <iostream>
#include <string>

using namespace std;

int main()

{
    string a, b, temporary; // function to swap s and d (splendid day to dplendid say)

    cout << "Input two words: " << endl;
    cin >> a >> b;

    cin.get(); //capture user input // to add index parameters?

    temporary = a[0]; //assign temp variable to a[0]
    b[0] = a[0];  //allocate b to a
    b[0] = temporary;  //do swap
    swap(a[0], b[0]);

    cout << "The two words you entered are: " << a << " " << b << endl; //attempt output


    return 0;
}

如果你想交换每个字符串的第一个字符,只需执行交换(而不是通过临时交换和手动操作):

swap(a[0], b[0]);

首先,您只是交换字符串的第一个字符。 a[0]a 的第一个字符,b.

也是如此

其次,您交换了两次:一次使用 std::swap,一次使用三个分配和一个临时分配。交换两次使其恢复原状!

交换一次

temporary = a[0]; //assign temp variable to a[0]
b[0] = a[0];  //allocate b to a
b[0] = temporary;  //do swap

再次交换

swap(a[0], b[0]);

代码的几个问题 -

  1. 您需要将临时声明为 char
 string a, b; // function to swap s and d (splendid day to dplendid say)
    char temporary;
  1. 临时分配 b[0] 的值
temporary = b[0]; //assign temp variable to b[0]
  1. 给a[0]赋临时值
a[0]= temporary;

换一次就够了。最后的交换功能将撤消这些更改,因此要么删除它,要么不要手动交换字符。

这在我这边解决了,我得到了 dplendid say 作为输出。