添加到String数组和引用

时间:2015-04-22 19:50:44

标签: c++ arrays

我有动态字符串的数组:

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 = "";在这里弄得一团糟。我对吗? 是否可以保持代码逻辑?

3 个答案:

答案 0 :(得分: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 :: vector或std :: list而不是指针。使用向量,您的代码如下所示:

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

......以后......

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

答案 1 :(得分:1)

我真的不认为你应该这样写代码。并且您不需要临时some_string - 分配字符串是明确定义的,并且完全按照它应该做的。在这种情况下,使用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

答案 2 :(得分: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:

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);
}