C++学习笔记(八)

一、动态空间申请

1. 动态分配内存概述

数组的长度是预先定义好的,在整个程序中固定不变,但是在实际编程中,往往会发生这种情况,即所需的内存空间取决于实际输入的数据,无法预先确定,为了解决上述问题,C++提供了一些关键字,可以按需要动态的分配内存空间,也可以把不再使用的空间回收再次利用

2. 动态分配、静态分配

(1)静态分配

①. 在程序编译或运行的过程中,按事先规定大小分配内存空间的分配方式。int a[10]

②. 必须事先知道所需空间的大小

③. 分配在栈区或全局变量区,一般以数组的方式

(2)动态分配

①. 在程序运行过程中,根据需要大小自由分配所需空间

②. 按需分配

③. 分配在堆区,一般使用特定的关键字进行分配

3. new和delete

(1)new和delete操作基本类型空间

new申请堆空间,delete释放空间

#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    int *p1 = NULL;
    p1 = new int; // 从堆区申请int类型大小的空间
    *p1 = 100;
    cout << "p1 = " << *p1 << endl; // 100

    // 释放空间
    delete p1;

    // new申请空间的同时可以初始化空间内容
    int *p2 = NULL;
    p2 = new int(100);
    cout << "p2 = " << *p1 << endl; // 100
    delete p2;
    return 0;
}

(2)new和delete操作数组空间

#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    int *arr = NULL;
    arr = new int[5]{10,20,30,40,50};
    for(int i =0;i<5;i++)
    {
        cout << *(arr+i) << ' ';
    }
    cout << endl;
    // 如果new有[] 那么delete也需要[]
    delete [] arr;
    return 0;
}

二、字符串处理函数

1. 字符串操作函数

以 str 开头为字符串处理函数 默认遇到 '\0' 结束操作

#include <string.h>

①. 测量字符串长度 strlen

#include <iostream>
#include <string.h>

using namespace std;

int main(int argc, char *argv[])
{
    char str1[128] = "hello world!";
    cout << "字符串str1的长度为:" << strlen(str1) << endl; // 12

    char str2[128] = "hello w\0rld!";
    cout << "字符串str2的长度为:" << strlen(str2) << endl; // 7
    return 0;
}

②. 字符串拷贝函数 strcpy,strncpy

char *strcpy(char *dest, const char *src);
char *strncpy(char *dest, const char *src, size_t n);
字符串拷贝时遇到 '\0' 结束
size_t n 是一个结束条件,为要拷贝的字符串的长度
dest:目标地址空间
src:原字符串的首元素地址
#include <iostream>
#include <string.h>

using namespace std;

int main(int argc, char *argv[])
{
    char dest0[128] = "";
    char dest1[128] = "";
    char dest2[128] = "";
    char src0[] = "hello world";
    char src1[] = "hello\0world";
    strcpy(dest0,src0);
    strcpy(dest1,src1);
    strncpy(dest2,src1,2);
    cout << dest0 << endl; // hello world
    cout << dest1 << endl; //hello
    cout << dest2 << endl; // he
    return 0;
}

③. 字符串追加函数 strcat,strncat

char *strcat(char *dest, const char *src);
char *strncat(char *dest, const char *src, size_t n);

将scr指向的字符串追加到dest指向的字符串的尾部
size_t n 将src字符串的前n个字符进行追加
#include <iostream>
#include<string.h>

using namespace std;

int main(int argc, char *argv[])
{
    char dest0[128] = "hello";
    char src0[128] = " ";
    char src1[128] = "world";
    strcat(dest0,src0); // hello+空格
    strcat(dest0,src1);// hello world
    cout << dest0 << endl;
    return 0;
}
#include <iostream>
#include<string.h>

using namespace std;

int main(int argc, char *argv[])
{
    char dest0[128] = "Hello";
    char src0[128] = ",";
    char src1[128] = "Tom和Jerry";
    strcat(dest0,src0); // hello,
    strncat(dest0,src1,3);
    cout << dest0 << endl; // Hello,Tom
    return 0;
}

④. 字符串比较大小函数 strcmp,strncmp

int strcmp(char *s1, const char *s2);
int strncmp(char *s1, const char *s2, size_t n);

size_t n 比较前n个字符

返回值:
>0   s1字符串 > s2字符串
<0   s1字符串 < s2字符串
==0   s1字符串 == s2字符串
#include <iostream>
#include<string.h>

using namespace std;

int main(int argc, char *argv[])
{
    char str1[128] = "";
    char str2[128] = "";
    while(1)
    {
        cout << "请输入第一个字符串:";
        cin >> str1;
        cout << "请输入第二个字符串:";
        cin >> str2;
        if(strcmp(str1,str2)>0)
        {
            cout << str1 << "大于" << str2 << endl;
        }
        else if(strcmp(str1,str2)<0)
        {
            cout << str1 << "小于" << str2 << endl;
        }
        else if(strcmp(str1,str2)==0)
        {
            cout << str1 << "等于" << str2 << endl;
        }
    }
    return 0;
}
#include <iostream>
#include<string.h>

using namespace std;

int main(int argc, char *argv[])
{
    char str1[128] = "Hello Tom";
    char str2[128] = "Hello Jerry";
    cout << strncmp(str1,str2,5) << endl; // 0
    cout << strncmp(str1,str2,6) << endl; // 0
    cout << strncmp(str1,str2,7) << endl; // 10(大于0)
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不懂编程的大学生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值