Я вижу несколько вопросов здесь.Начнем с того, что вы установили arrayLength = 0
, поэтому он не будет перебирать весь массив, если в нем уже есть что-то.Если у вас ничего нет, начинать с 1000 предметов бессмысленно.Кроме того, while (getline(cin,temp))
- это бесконечный цикл, поэтому он никогда не закончится и фактически не напечатает массив.Если вы хотите распечатать массив после каждого добавления, вам нужно переместить его в цикл while
.Нет никакой реальной причины для cout
числа, которое вводит пользователь;они уже видят только что набранную строку.
Что еще более важно, существуют реальные проблемы с динамическим размещением.Вы создали статический массив (string * arrayOfWOrds = new string[1000];
), затем передаете его функции, которая увеличивает размер нового массива на один элемент, устанавливает последний элемент в этом массиве на новое значение, а затем выполняет итерацию по всему новому массиву.и дублирует значения в старый массив.По сути, вы просто вставляете элементы в статический массив в этот момент, и то, что вы вставляете, - пустая куча (потому что в новом массиве есть только один элемент, и он находится в arrayLength + 1, что находится за пределами границ.исходного массива).
Вам нужно удалить старый массив, а не новый массив, который на самом деле должен быть брошен в кучу и возвращен.
По сути, он должен выглядеть примерно так:
#include <iostream>
#include <string>
using namespace std;
string* addToArray(string newWord, string myArray[], int& arrayLength)
{
string * returnArray = new string[arrayLength + 1];
returnArray[arrayLength] = newWord;
for (int i = 0; i < arrayLength; ++i)
{
returnArray[i] = myArray[i];
}
arrayLength++;
delete [] myArray;
return returnArray;
}
int main()
{
const int startSize = 0;
string * arrayOfWords = new string[1];
int arrayLength = startSize;
string temp;
cout << "Input: ";
getline(cin, temp);
string word = "";
for (char c : temp){
if (c == ' '){
arrayOfWords = addToArray(word, arrayOfWords, arrayLength);
word = "";
} else word.push_back(c);
}
arrayOfWords = addToArray(word, arrayOfWords, arrayLength); // Don't forget the last word
for (int i = 0; i < arrayLength; ++i)
{
cout << arrayOfWords[i] << endl;
}
}