动态内存分配编程题

来源:互联网 发布:万网域名登录 编辑:程序博客网 时间:2024/06/06 06:07

1.有一字符串,其中包含数字,提取其中的数字,要求动态分配内存保存

char str[] = "123456summer123";    //1.计算出字符中数字的个数    int count = 0;//存储数字的个数    int i = 0;    while (str[i] != '\0') {        if (str[i] >= '0' && str[i] <= '9') {            count++;        }        i++;    }    printf("count = %d", count);    char *p = malloc(count + 1);    i = 0;    int k = 0;//用来标识 数字数组元素的位置    while (str[i] != '\0') {        if (str[i] >= '0' && str[i] <= '9') {            *(p + k) = str[i];            k++;        }        i++;    }    *(p + k) = '\0';//最后一个补'\0',作为字符串结束标志    printf("\n%s", p);    free(p);//释放堆区空间    p = NULL;//将指针变量指向一块无效的区域

//2.输入3个学员的姓名,动态分配内存保存学员姓名,并在最后输出

    //(1)从控制台输入的字符串如何存储?

    //解决方案:定义一个字符数组,接收输入的字符串

    //(2)如何动态为学员姓名开辟空间?

    //解决方案:计算出字符串的长度然后加1.

    //(3)如何存储为3个学员姓名开辟空间之后的地址?

    //解决方案:使用指针数组来进行存储地址,数组中由3个元素.

    char tempStr[20] = {0};//接收输入的字符串    char *names[3] = {0};//存储学员姓名    printf("请输入学员姓名:\n");    for (int i = 0; i < 3; i++) {        scanf("%s", tempStr);//输入字符串        names[i] = malloc(strlen(tempStr) + 1);//根据字符串大小动态分配内存,将地址存储在对应的指针数组元素中        strcpy(names[i], tempStr);//在临时数组中的数据拷贝到对应的堆区空间上    }    for (int i = 0; i < 3; i++) {        printf("%s\n", names[i]);//打印堆区字符        free(names[i]);//释放堆区内存        names[i] = NULL;//将指针变量指向无效空间    }


0 0