2

我在 C++ 中处理字符串数组时遇到问题。我尝试了以下两种方法。仍然无法解决问题...在这里:当我使用时:

string* fun(string* a,string*b) 
{
    string c[];
    return c; /* c is string array type*/ 
} 

它返回存储在字符串数组 c 中的第一个字符串我希望返回整个字符串数组。当我使用:

vector<string> fun(vector<string> a,vector<string> b){
    vector<string> c;
    return c;
}

仍然,我有一些错误。
你能帮我知道这两种情况的问题出在哪里吗?需要进行哪些修改才能获得所需的结果。如何在 C++ 中处理字符串数组。提前谢谢!!

4

5 回答 5

1

如果你必须返回一个比字符串更复杂的对象,你应该向你的函数传递一个指向向量的链接(在你的代码中)并用值填充它。这是一种快速而正确的方法。

vector<string> fun(vector<string> a,vector<string> b, vector<string>& result){
  res.push_back("one");
  res.push_back("two");
  res.push_back("three");
}
于 2012-06-13T05:44:47.513 回答
1

在第一个版本中,您将返回一个指向局部变量(您的数组)的指针,当您离开作用域时,它将不再存在。您需要在堆上创建数组,例如使用mallocor new。如果您手动分配它,请不要忘记释放它。

在第二个版本中,您将返回vector函数中声明的副本(如果您修改了string返回的 s vector,它们将不会在aet中修改b)。您正在创建一个空vector而不在其中添加任何内容,因此它不会包含任何string.

于 2012-06-13T05:40:16.137 回答
0

您不能直接在 C++ 中返回数组(它继承自 C)。解决方法是将其填充到结构中。

struct returned_array
{
    string result[100];
};
returned_array fun()
{
    returned_array result;
    result.result[0] = "whatever";
    return result;
}

我刚刚选择了一个任意大小的 100 作为示例。如果您想根据传入的数组大小来确定返回大小,可以添加一个模板参数:

template<int N>
struct returned_array
{
    string result[N];
};
template<int N>
returned_array<N> fun(string (&)[N])
{
    returned_array<N> result;
    result.result[0] = "whatever";
    return result;
}
于 2012-06-13T06:38:01.473 回答
0

在您的第一个片段中,您可以尝试初始化以new自己分配空间。

string* func() {
    string* c = new string[3];
    c[0] = "Hello";
    c[1] = "World";
    c[2] = "<3";
    return c;
}

主要:

m = func();
for(int i = 0; i < 3; i++)
{
    cout << m[i] << endl;
}

这应该可以防止它在函数结束后失去作用域。不要忘记释放空间。请注意,您返回的是指向数组的指针,而不是数组。此外,我运行您的第二段代码也没有问题。请始终分享您遇到的错误。

于 2012-06-13T05:57:02.753 回答
0

在 C/C++ 中,从函数返回字符串时,如果返回本地缓冲区将不起作用。

返回的指针应该是一个静态缓冲区(如静态字符串 c[])或指向调用者函数传入的缓冲区的指针(如 string *fun(string *a, string *b, string *c) )或指向 a使用 malloc/new 但不是本地数组获得的内存。

于 2012-06-13T05:59:01.773 回答