#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 获取数组个数
int get_repeat()
{
int repeat = 0;
do
{
printf("请输入repeat的值[repeat > 0]: ");
scanf("%d", &repeat);
} while (0 >= repeat);
return repeat;
}
// 获取每个数组的内容
// current_numbers 一维数组,表示每个数组所含元素个数
// repeat 数组总个数
int ** get_repeats_array(int * current_numbers, int repeat)
{
int num = 0; // 当前数组的个数
int * array = 0; // 动态数组,存储当前数组的元素
int **parr = (int **)malloc(sizeof(int *) *repeat); // 指针数组,每个元素表示一个数组
for (int i = 0; i < repeat; i++)
{
do {
printf("请输入当前数组中元素个数: ");
scanf("%d", &num);
} while (0 >= num);
current_numbers[i] = num; // 当前数组元素个数存储一维数组中
array = (int *)malloc(sizeof(int) * num);
if (NULL == array)
{
printf("malloc failed...\n");
exit(EXIT_FAILURE);
}
printf("请输入%d个元素: ", num);
for (int j = 0; j < num; j++)
{
scanf("%d", &array[j]); // 将数据存储到数组中
}
parr[i] = array; // 将当前数组放入到指针数组中
}
return parr;
}
// 释放申请有内存空间
void release(int ***ptr, int *** other, int ** nums, int ** new_nums, int len)
{
for (int i = 0; i < len; i++)
{
free((*ptr)[i]);
free((*other)[i]);
}
free(*ptr);
free(*nums);
free(*other);
free(*new_nums);
*ptr = 0;
*nums = 0;
*other = 0;
*new_nums = 0;
}
// 取出符合要求的数据元素,并放入新的数组中
int ** sort(int ** array, int * nums, int len, int *new_nums)
{
int count = 0;
int * tmp = 0;
int ** pparr = (int **)malloc(sizeof(int*) * len); // 指针数组
for (int i = 0; i < len; i++)
{
tmp = (int *)malloc(sizeof(int)); // 一维数组,存储符合要求的数据
for (int j = 0; j < nums[i] - 1; j++)
{
if (array[i][j] < array[i][j + 1])
{
tmp = (int *)realloc(tmp, sizeof(int) * (count + 1)); // 增加存储空间,以容纳新的数据
tmp[count++] = array[i][j];
}
}
new_nums[i] = count; // 记录当前数据中元素个数
pparr[i] = tmp; // 将当前数组地址放入指针数组中
count = 0; // 清空记录个数
tmp = 0;
}
return pparr;
}
// 打印数组中的元素
// array 指针数组,存储所有数组
// nums 一维数组,当前数组中元素个数
// len 指针数组中存储数组的个数
void print_array(int ** array, int * nums, int len)
{
for (int i = 0; i < len; i++)
{
for (int j = 0; j < nums[i]; j++)
{
printf("%d ", array[i][j]);
}
printf("\n");
}
printf("\n");
}
// TEST
int main(int argc, char * argv[])
{
int * current_numbers = 0;
int * new_nums = 0;
int ** pparray = 0;
int ** ppnew_array = 0;
int n = get_repeat();
current_numbers = (int *)malloc(sizeof(int) * n);
new_nums = (int *)malloc(sizeof(int) * n);
pparray = get_repeats_array(current_numbers, n);
printf("\n原始数据如下:\n");
print_array(pparray, current_numbers, n);
ppnew_array = sort(pparray, current_numbers, n, new_nums);
printf("符合要求的数据元素如下:\n");
print_array(ppnew_array, new_nums, n);
release(&pparray, &ppnew_array, ¤t_numbers, &new_nums, n);
return 0;
}
程序中有些地方没有做数据有效性验证,自己添加上就好了