C ++:数组中的反向字符串。在两个不同的数组之间交换字符串

时间:2012-03-09 00:57:13

标签: c++ arrays string reverse

我已为此代码编写了主干。我只需要了解一下如何完成这些功能。我认为a.swap(b)可以在同一个数组中交换两个字符串。我错了吗?

任何见解/建议都表示赞赏。

#include <string>
using std::string;
#include <iostream>
#include <cassert>

using namespace std;

void swap(string & a, string & b); // swaps two strings.
void reverse_arr(string a1[], int n1); // reverse an array of strings.
void swap_arr(string a1[], int n1, string a2[], int n2); // swaps two arrays of strings.

int main(){
  string futurama[] = { “fry”, “bender”, “leela”, 
                        “professor farnsworth”, “amy”, 
                        “doctor zoidberg”, “hermes”, “zapp brannigan”, 
                        “kif”, “mom” };

  for (int i=0;i<10;i++)
    cout << futurama[i] << endl;

  swap(futurama[0],futurama[1]);
  cout << “After swap(futurama[0],futurama[1]);” << endl;

  for (int i=0;i<10;i++)
    cout << futurama[i] << endl;

  reverse_arr(futurama,10);
  cout << “After reverse_arr(futurama,10);” << endl;

  for (int i=0;i<10;i++)
    cout << futurama[i] << endl;

  // declare another array of strings and then 
  // swap_arr(string a1[], int n1, string a2[], int n2);

  char w;
  cout << “Enter q to exit.” << endl;
  cin >> w;
  return 0;
}

void swap(string & a, string & b){
  // swaps two strings.
  a.swap(b);
}

void reverse_arr(string a1[], int n1) {

// Reverse an array of strings.

}

void swap_arr(string a1[], int n1, string a2[], int n2) {

// swaps two arrays of strings.

}

1 个答案:

答案 0 :(得分:0)

std::string::swap函数肯定会在数组中交换两个字符串......它执行与std::swap完全相同的功能。话虽如此,由于std::string对象实际上是通过指针管理动态分配的字符串,因此STL的swap版本实际上不会交换内存块。因此,交换实际数组的函数必须在数组中递增,并为每个元素调用swap。例如:

void swap_arr(string a1[], int n1, string a2[], int n2) 
{
    for (int i=0; i < min(n1, n2); i++)
    {
        swap(a1[i], a2[i]);
    }
}

对于你的reverse_arr函数,你可以做一些非常相似的事情,但只需要通过一半数组(一个小于枢轴位置的插槽,可以是一个元素,也可以是两个元素之间),而不是整个阵列,否则你将把所有东西都换回原来的位置。