如何以倒序的方法去除数组尾部的填充零,直到遇到有效数值,用C语言举例说明
时间: 2024-03-10 07:44:47 浏览: 102
可以使用两个指针的方法,一个指针指向数组末尾,一个指针指向当前需要填充零的位置。然后从数组末尾开始遍历,如果遇到非零元素,就将其移动到当前需要填充零的位置,并将指向当前位置的指针向前移动一位;如果遇到零元素,就继续向前遍历。最后,指向当前位置的指针之前的所有元素都已经填充好了零,并返回指向第一个非零元素的指针。
以下是示例代码:
```c
#include <stdio.h>
int* remove_trailing_zeros(int arr[], int n) {
int i = n - 1; // 指向数组末尾
int j = n - 1; // 指向当前需要填充零的位置
while (i >= 0) {
if (arr[i] != 0) {
arr[j] = arr[i];
j--;
}
i--;
}
while (j >= 0 && arr[j] == 0) { // 找到第一个非零元素
j--;
}
return arr + j + 1; // 返回指向第一个非零元素的指针
}
int main() {
int arr[] = {1, 2, 0, 0, 3, 0, 4, 5, 0};
int n = sizeof(arr) / sizeof(int);
int* p = remove_trailing_zeros(arr, n);
for (int i = 0; i < p - arr; i++) { // 通过指针差计算有效元素个数
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
在函数 remove_trailing_zeros 中,我们遍历数组并移除尾部的零。最后,我们再次遍历数组,找到第一个非零元素,并返回指向该元素的指针。在主函数中,我们使用返回的指针计算有效元素的个数,并输出数组中的元素。
阅读全文