Как объединить две строки * arr [] в C ++ - PullRequest
0 голосов
/ 25 февраля 2012

Я немного озадачен здесь. Я работаю над созданием класса двоичной кучи, смоделированной массивом. Я пытаюсь взять два массива строк и соединить их вместе (для функции слияния), чтобы создать новый массив, который я затем буду выполнять операции сортировки.

Оба массива инициализируются, как в моем интерфейсе:

string *heapArray;

Оба массива построены так же, как и в моей реализации:

heapArray = new string[10];

И код, который я пробовал, который не будет компилироваться, таков:

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

Так что, очевидно, я что-то здесь не так сделал, но в прошлом я не делал никаких конкатенаций с массивами необработанных C ++, в основном, с осторожностью обращаясь с векторами. Увы, работа над этим заданием по оптимизации требует этого. Любое руководство будет оценено.

Я понимаю, что не выложил много кода, но меня расстраивают люди, которые размещают здесь массовые блоки кода. Я опубликовал то, что считаю уместным, но если есть что-то конкретное, чего мне не хватает, что было бы полезно, дайте мне знать, и я добавлю это.

Ответы [ 5 ]

2 голосов
/ 25 февраля 2012

При работе с прямыми массивами C ++ единственный способ сложить два из них вместе, как это, - выделить новый массив и вставить их один за другим из двух исходных массивов в новый

EDIT: Или memcpy, но это не так просто с неосновным типом данных

1 голос
/ 25 февраля 2012

Вы не можете этого сделать; вы добавляете два адреса памяти (указатели) вместе, чтобы получить бессмысленный указатель. Я бы порекомендовал вам заменить heapArray на vector строк

heapArray = vector<string>(10);

, а затем объединить два вектора.

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

Кроме того, данные находятся в куче, поэтому ваш идентификатор "heapArray" все еще действителен. Если вы не хотите использовать vector (по некоторым академическим причинам), вы можете объединить one и two, выделив достаточно места в merged->heapArray и скопировав каждый элемент в ваших массивах.

0 голосов
/ 25 февраля 2012

ошибка компиляции происходит из-за того, что вы добавляете два нерелевантных указателя, если хотите объединить две строки, то вы можете добавить их сейчас, что вы должны сделать так:

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

v3 даст векторс каскадными строками

0 голосов
/ 25 февраля 2012

Я думаю, что то, что вы ищете, выглядит так:

string heapArray;
heapArray = new string[10]; // create an array of strings
...
string mergedString = heapArray[0] + heapArray[1];
0 голосов
/ 25 февраля 2012
merged->heapArray = one->heapArray + two->heapArray;

Вы пытаетесь добавить два указателя, а не объединять строки. Вы не можете просто конкатенировать массивы подобным образом, вам нужно выделить новую область памяти и скопировать их (использование memcpy со сложными типами не всегда безопасно. Вы всегда можете выделить массив, достаточный для обоих, и скопировать их).

Кроме того, зачем использовать массив string (при условии std::string здесь) для кучи? Это очень ... странно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...