Я создал функцию, которая возвращает указатель на массив строк. Функция должна проходить по связанному списку и назначать данные из каждого узла в массив строк. Вот моя функция:
//function to traverse every node in the list
string *DynStrStk::nodeStrings(int count)
{
StackNode *nodePtr = nullptr;
StackNode *nextNode = nullptr;
int i = 0;
//Position nodePtr at the top of the stack
nodePtr = top;
string *arr = new string[count];
//Traverse the list and delete each node
while(nodePtr != nullptr && i < count)
{
nextNode = nodePtr->next;
arr[i] = nodePtr->newString;
nodePtr = nextNode;
cout << "test1: " << arr[i] << endl;
}
return arr;
}
я хочу использовать этот указатель на массив, возвращенный функцией выше, и я хочу назначить его новому массиву в другой функции, где он будет проверять каждый индекс в этом массиве на наличие условия.
У меня проблемы с доступом к новому массиву, и я даже не могу распечатать строку в каждом новом элементе массива.
arr = stringStk.nodeStrings(count);
cout << "pointer to arr of str: " << *arr << endl;
for(int i = 0; i < count; i++)
{
cout << "test2: " << arr[i] << endl;
}
это мой вывод после вызова обеих функций:
test1: rotor
test1: rotator
test1: racecar
test1: racecar
pointer to arr of str: racecar //this test tells me i can get to array
test2: racecar
test2:
test2:
test2:
это мой ожидаемый результат
test1: rotor
test1: rotator
test1: racecar
test1: racecar
pointer to arr of str: racecar
test2: racecar
test2: racecar
test2: rotator
test2: rotor
что я делаю не так и как я могу получить доступ к каждому элементу в новом массиве из второй функции ??????
Спасибо!!!!
вот вторая функция, использующая указатель на массив:
int createStack(fstream &normFile, ostream &outFile)
{
string catchNewString;
string testString, revString;
string *arr;
int count = 0; //counts the number of items in the stack
DynStrStk stringStk;
while(getline(normFile,catchNewString)) // read and push to stack
{
stringStk.push(catchNewString); // push to stack
//tracer rounds
outFile << catchNewString << endl;
count++;
}arr = stringStk.nodeStrings(count);
cout << "pointer to arr of str: " << *arr << endl;
for(int i = 0; i < count; i++)
{
cout << "test2: " << (arr[i]) << endl;
}
return count;
}
Вы забыли увеличить i
в функции DynStrStk::nodeStrings
, Поэтому все ваши задания arr[0]
,
Обычно вы не хотите «возвращать» указатели на массивы.
Какой тип «arr» во внешней функции?
Во всяком случае, индексная запись действительна, что-то еще в вашем коде нет.