C语编写一个函数并调用,以一个整数数组和数组的长度作为参数。要求函数将数组中所有重复元素删除,只保留第一次出现的元素,并且保持原有的元素顺序不变,最后返回处理后数组的新长度
时间: 2024-10-29 13:16:22 浏览: 23
在C语言中,你可以通过遍历数组并使用一个临时数组存储非重复元素的方式来实现这个功能。这里是一个简单的示例,假设输入数组`arr`和其长度`n`:
```c
#include <stdio.h>
// 函数声明
size_t removeDuplicates(int arr[], size_t n);
int main() {
int arr[] = {1, 2, 3, 3, 4, 4, 5};
size_t initial_len = sizeof(arr) / sizeof(arr[0]); // 获取原始数组长度
// 调用函数并获取新长度
size_t new_len = removeDuplicates(arr, initial_len);
// 打印处理后的数组(注意这里只是打印长度,数组不会实际改变)
printf("New length after removing duplicates: %zu\n", new_len);
return 0;
}
// 函数实现:移除数组中的重复元素并返回新长度
size_t removeDuplicates(int arr[], size_t n) {
if (n == 0 || n == 1) // 如果数组为空或只有一个元素,直接返回
return n;
int *new_arr = malloc(n * sizeof(int)); // 分配空间存放新的数组
size_t new_len = 1; // 新数组开始位置,用于存储非重复元素
for (size_t i = 0; i < n; i++) {
if (i > 0 && arr[i] != arr[i - 1]) {
new_arr[new_len++] = arr[i]; // 只有当遇到不同元素才添加到新数组
}
}
new_arr[new_len] = '\0'; // 添加结束标记,因为数组实际上是字符串形式
// 返回新数组长度,而不是分配的空间大小,因为我们不再需要那么多内存
return new_len;
}
```
阅读全文