如何在C ++中使用new []和delete []运算符

时间:2018-10-29 06:08:23

标签: c++ dynamic-memory-allocation

我目前正在学习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 :(得分:3)

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字符放在最后。

答案 1 :(得分:0)

从现在开始,我建议您在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; 删除分配的内存。

对于我正在讨论的矩阵示例,同样的事情:您首先在循环中删除(因为如果删除第一个数组,则无法访问其中的数组的已分配内存!),然后“删除” “从阵列中删除该内存,即可删除该阵列的内存!