C ++: обратные строки в массиве.Поменяйте местами строки между двумя разными массивами - PullRequest
0 голосов
/ 09 марта 2012

Я написал основу для этого кода. Мне просто нужно было немного понять, как я буду выполнять функции. я полагаю, что 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 голосов
/ 09 марта 2012

Функция std::string::swap определенно поменяет две строки в массиве ... она выполняет ту же функцию, что и std::swap. При этом, поскольку объект std::string фактически управляет динамически размещенной символьной строкой через указатели, версии swap в STL фактически не будут менять местами блоки памяти. Поэтому ваша функция для замены реальных массивов должна будет увеличиваться в массиве и вызывать 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 вы можете сделать что-то очень похожее, но просто сделайте проход через половину массива (на один слот меньше, чем положение поворота, которое может быть либо элементом, либо между двумя элементами), чем весь массив, иначе вы все вернете обратно в исходное положение.

...