【问题标题】:How to concatenate two string *arr[] in C++如何在 C++ 中连接两个字符串 *arr[]
【发布时间】:2012-02-24 21:53:41
【问题描述】:

我在这里有点难过。我正在构建一个由数组建模的二进制堆类。我正在尝试获取两个字符串数组,并将它们连接在一起(用于合并函数)以创建一个新数组,然后我将对其执行排序操作。

在我的界面中,这两个数组都是这样初始化的:

string *heapArray;

在我的实现中,两个数组都是这样构造的:

heapArray = new string[10];

我尝试过的无法编译的代码是这样的:

merged->heapArray = one->heapArray + two->heapArray;

所以很明显我在这里做错了,但我过去没有对原始 C++ 数组进行任何串联,主要是使用向量来保证安全。唉,处理这个优化任务需要它。任何指导将不胜感激。

我意识到我没有发布太多代码,但我对在这里发布大量代码块的人感到沮丧。我已经发布了我认为相关的内容,但是如果我遗漏了一些对我有帮助的特定内容,请告诉我,我会添加它。

【问题讨论】:

    标签: c++ arrays concatenation


    【解决方案1】:

    在处理直接的 C++ 数组时,像这样将两个数组相加的唯一方法是分配一个新数组,并将它们从两个源数组中一个接一个插入到新数组中

    编辑: 或者 memcpy,但对于非基本数据类型来说,这并不容易

    【讨论】:

    • 谢谢丹,成功了……我希望能有更快更脏的东西,但这样就可以了
    【解决方案2】:

    你不能那样做;您将两个内存地址(指针)加在一起以产生无意义的指针。我建议您将 heapArray 替换为 vector 字符串

    heapArray = vector<string>(10);
    

    然后连接两个向量。

    merged.heapArray = one.heapArray;
    one.heapArray.insert(one.heapArray.end(),two.heapArray.begin(),two.heapArray.end() );
    

    此外,数据位于堆上,因此您的“heapArray”标识符仍然有效。如果您不想使用vector(出于某种学术原因),可以通过在merged-&gt;heapArray 中分配足够的空间并复制数组中的每个元素来合并onetwo

    【讨论】:

      【解决方案3】:
      merged->heapArray = one->heapArray + two->heapArray;
      

      您试图在此处添加两个指针,而不是连接字符串。你不能像这样连接数组,你需要分配一个新的内存区域并将它们复制进去(使用复杂类型的memcpy 并不总是安全的。你总是可以分配一个足够的数组并将它们复制进去)。

      另外,为什么要使用string 的数组(这里假设std::string)作为堆?这很……奇怪。

      【讨论】:

      • 为什么奇怪?堆通常实现为数组[或动态数组],如果他想要strings 的堆? :\
      • @amit:OP 说他正在创建一个“二进制堆类”。我并不认为这意味着一堆只有(逻辑)字符串。可能是错的,尽管在支持模板的语言中我仍然认为这是一个奇怪的选择。
      【解决方案4】:

      我认为您正在寻找的内容如下所示:

      string heapArray;
      heapArray = new string[10]; // create an array of strings
      ...
      string mergedString = heapArray[0] + heapArray[1];
      

      【讨论】:

        【解决方案5】:

        编译错误是由于您添加了两个不相关的指针 如果要合并两个字符串,则可以添加它们 现在你应该做的是

        vector<string> v1,v2,v3;
        .
        .
        .
        for(int i = 0; i < v1.size(); i++){
            v3.push_back(v1[i] + v[i]);
        }
        

        v3 将给出带有串联字符串的向量

        【讨论】:

          猜你喜欢
          • 2012-01-17
          • 1970-01-01
          • 2019-11-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-02-11
          • 2011-11-04
          相关资源
          最近更新 更多