как использовать оператор new [] и delete [] в C ++ - PullRequest
0 голосов
/ 29 октября 2018

Я сейчас изучаю C ++, я уже выполнил это задание, которое мне нужно для преобразования массива из прописных в строчные и наоборот:

int main()
{
    char str[100];
    cout << "Enter anything: ";
    cin.getline(str, 100);

    //upper to lower vice versa
    for (int i = 0; i < 100; i++) {
        if (str[i] == 0x20)
        {
            continue;
        }
        str[i] ^= 0x20;
    }
    cout << "output: " << str;

return 0;

}

Но они хотят, чтобы я использовал оператор new [] и delete [], поэтому я больше не буду объявлять числа в массиве, который является этой частью char str [100]; Я уже пытался использовать его, но концепция вводит меня в заблуждение.

Есть предложения? Любая помощь будет высоко ценится! Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Советую вам теперь посмотреть информацию в cplusplus ! Это действительно хорошая помощь, если вы начинаете!

char* userInput;
int length;
std::cout<<"Input the length of the array!"<<std::endl;
std::cin>>length;
std::cout<<"Creating memory!"<<std::endl;
userInput=new char[length+1];

Теперь представьте, что вы хотите создать матрицу (массив массивов).

Сначала вы делаете то же, что и выше, а затем для числа массивов в массиве в цикле for, например, вы делаете новое таким же образом.

delete[] userInput; Удалить де выделенную память.

Что касается примера матрицы, о котором я говорил, то же самое: сначала вы удаляете в цикле (потому что если вы удаляете первый массив, вы не можете получить доступ к выделенной памяти массивов внутри него!), А после «удаляете» «эта память из массивов, вы удаляете память из массива!

0 голосов
/ 29 октября 2018
int main(){
    char *str;
    int sz = 0;

    std::cout << "enter number of characters: ";
    std::cin >> sz;

    str = new char[sz + 1];

    std::cout << "Enter anything: ";
    std::cin.ignore();
    std::cin.getline(str, sz + 1);

    //upper to lower vice versa
    for (int i = 0; i < sz; i++) {
        if (str[i] == 0x20)
        {
            continue;
        }
        str[i] ^= 0x20;
    }
    std::cout << "output: " << str;

    delete[] str;
    return 0;
}

При new вы выделяете память в куче, при delete [] вы освобождаете память.

Примечание: вы должны назначить sz + 1 в качестве размера массива, поскольку getline ставит символ 0 в конце.

...