2012-03-09 56 views
0

我已經爲此代碼編寫了主幹。我只需要一點關於我如何完成這些功能的見解。我認爲a.swap(b)可以用於交換同一陣列中的兩個字符串。我錯了嗎?C++:數組中的反向字符串。在兩個不同的陣列之間交換字符串

任何見解/建議表示讚賞。

#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. 

} 
+2

縮進,請! – 2012-03-09 00:58:41

+0

看看http://www.cplusplus.com/reference/string/swap/ – noMAD 2012-03-09 01:03:42

+0

如果「我是我錯了嗎?」是你的全部問題,這可能會被關閉。你有這個代碼的特定問題嗎?它工作嗎?如果沒有,具體是什麼不做你期望的?我們非常樂意幫助您做家庭作業,但您至少應該提出有意義的問題。一個模糊的「我錯了嗎?」沒有其他東西沒有幫助(或者試圖自己解決它的跡象)。 – 2012-03-09 01:11:29

回答

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功能,你可以做一些非常相似,只是做一個穿過半個陣列(一個小於樞軸位置,這可以是一個元素插槽,或兩者之間元素),而不是整個數組,否則你將把所有的東西都交換回原來的位置。

+2

請不要爲作業問題提供代碼解決方案;它打敗了整個學習過程。如果您提供指導,指導提問者自己解決問題(尤其是在包含大量代碼的問題的情況下,並且詢問「這是否正常工作?」或「這是正確的?」,並且沒有任何跡象他們甚至先試過這些代碼)。如果你幫助他們學習而不是提供複製/粘貼解決方案,那麼詢問的人(以及未來的其他人可能需要維護他們編寫的代碼)會更好。 :) – 2012-03-09 01:15:50

相關問題