2015-04-22 53 views
-2

我有動態字符串的數組:添加到字符串數組和參考

string *acc = new string[2]; 
string some_string; 

我想兩個字符串添加到該數組,但與參考(我認爲)的問題。

我有下面的例子(非常難看,但它顯示的問題):

for (int i = 0; i < 2; i ++) { 

    if (i == 0) 
     some_string = "ab"; 
    else 
     some_string = "cd"; 
    acc[i] = some_string; 
    some_string = ""; 
} 
return acc 

當然這個代碼是沒有任何意義的,但我的代碼是比較複雜的,它會隱藏問題。 關鍵是代碼返回cd而不是abcd。在我看來some_string = "";在這裏弄得一團糟。我對嗎? 是否可以做到保持代碼邏輯?

+0

什麼是你真正想實現什麼?可能有更好的方法來做到這一點。 – NathanOliver

+1

請避免指針 –

+2

你沒有比較我和0你分配它。使用'我== 0'而不是 – puelo

回答

1

不,你只是做了一個錯誤:

for (int i = 0; i < 2; i ++) { 

    if (i == 0) // == instead of = !!!!!!!!!!!!!!!!!!!!!! 
     some_string = "ab"; 
    else 
     some_string = "cd"; 
    acc[i] = some_string; 
    some_string = ""; 
} 
return acc; 

考慮使用指針的一個std ::向量或std ::列表,而不是太多。有了載體,代碼如下:

std::vector<std::string> vs; 

......後來......

vs.push_back("ab"); 
vs.push_back("cd"); 
+0

對不起,不檢查我的代碼:(它應該是'我== 0' – Ojmeny

+0

...或只是'std :: vector vs {「ab」,「cd」};' –

+0

@JerryCoffin在initilizing,是我想在他現有的代碼附近展示一個解決方案,我更新我的答案以便更清楚。 –

1

我真的不認爲你應該寫這樣的代碼。而且你不需要臨時的some_string - 分配字符串的定義非常明確,並且完全按照它應該做的。在THI情況下,使用vector - 這是更安全的方法:

#include <iostream> 
#include <string> 
#include <vector> 

using namespace std; 

int main() 
{ 
    vector<string> ac; 

    for(int i = 0; i < 2; ++i) 
    { 
     if(i == 0) 
      ac.push_back("ab"); 
     else 
      ac.push_back("cd"); 
    } 

    cout<<ac[0]<<ac[1]<<endl; 

    return 0; 
} 

工作樣本:here

1

目前尚不清楚爲什麼你期望「abcd」的結果。 您將some_string賦值爲「cd」而不是添加到「ab」。

這也許是你正在嘗試:

string* func() 
{ 
    string *acc = new string[2]; 
    string some_string; 

    for (int i = 0; i < 2; i ++) 
    { 

     if (i == 0) 
      some_string = "ab";     // "ab" 
     else 
      some_string = some_string + "cd"; // "ab" + "cd" -> "abcd" 

     acc[i] = some_string; 
     //some_string = ""; 
    } 
    return acc; 
} 

int main(int argc, char** argv) 
{ 
    string* y = func(); 

    cout << y[0] << endl; // First element "ab" 
    cout << y[1] << endl; // Second element "abcd" 

    // Other stuff 
    // .... 

    // Remember to delete y 

    return(0); 
} 

輸出:

ab 
abcd 

但正如其他人所說的....使用矢量來代替。

你也可以使用std ::數組是這樣的:

array<string, 2> func2() 
{ 
    array<string, 2> res; 
    string some_string; 

    for (int i = 0; i < 2; i ++) 
    { 

     if (i == 0) 
      some_string = "ab"; 
     else 
      some_string = some_string + "cd"; 

     res[i] = some_string; 
    } 

    // Or just this instead of a for loop 
    // res[0] = "ab"; 
    // res[1] = "abcd"; 

    return res; 
} 


int main(int argc, char** argv) 
{ 
    array<string, 2> z = func2(); 

    cout << z[0] << endl; 
    cout << z[1] << endl; 

    return(0); 
}