我已为此代码编写了主干。我只需要了解一下如何完成这些功能。我认为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.
}
答案 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
函数,你可以做一些非常相似的事情,但只需要通过一半数组(一个小于枢轴位置的插槽,可以是一个元素,也可以是两个元素之间),而不是整个阵列,否则你将把所有东西都换回原来的位置。