2017-01-27 4 views
-1

Привет, я пытаюсь выполнить функцию, которая может разбивать каждый текст, который я хочу. Например, если я ввожу apple :: google :: dsf, а разделитель: каждый элемент будет помещен в место в массиве. Я добился успеха, но теперь я хочу использовать этот массив в своей основной части. Поэтому я хочу напечатать массив, который я возвращаю в своей функции в основном, а не печатать массив из функции Split(). Итак, мой вопрос: как это сделать? Это мой код:Печатать массив функции, возвращающей указатель

int main() 
{ 
    string buffer; string delimitor = "::"; 
    unsigned int param = 0; 
    cout << "Please enter how many param: "; cin >> param; 
    cout << "Please enter something in the buffer: "; cin >> buffer; 
    Split(buffer, delimitor, param); 

    system("PAUSE"); 
    return 0; 
} 

string* Split(string buffer, string delimitor, unsigned int nbr_param) 
{ 
    string* arr = new string[nbr_param]; 
    unsigned int start = 0, end = buffer.find(delimitor), count = 0; 
    while (end != string::npos) 
    { 
     arr[count] = buffer.substr(start, end - start); 
     start = end + delimitor.length(); 
     end = buffer.find(delimitor, start); 
     count++; 
    } 
    if (end == string::npos) 
    { 
     arr[count] = buffer.substr(start, end); 
    } 

    return arr; 
} 
+2

Лучше вернуть 'std :: vector ' чем необработанный указатель владения. – Jarod42

ответ

2

магазин возвращаемое значение в переменной, чем перебирать его.

std::string* words = Split(buffer, delimitor, param); 
for (std::size_t i = 0; i != param; ++i) { 
    std::cout << words[i] << std::endl; 
} 
delete[] words; 

Если вы вернетесь std::vector<std::string>, вы можете сделать

const auto& words = Split(buffer, delimitor); // param is no longer needed. 
for (const auto& word : words) { 
    std::cout << words[i] << std::endl; 
} 
1

Было бы проще использовать std::vector, push_back фрагменты и покончит с new в целом. Вероятно, так же эффективно, как и возвращенный вектор, который будет либо перемещен, либо построен на месте из-за RVO.

В любом случае, вам, конечно, придется назначить возвращаемое значение переменной в main. Прямо сейчас вы просто вызываете split и отбрасываете значение, теряя память, выделенную в Split.

Смежные вопросы