如何写一子函数 删除一维数组中相同的元素
编写一个程序 1:删除一维数组中所有相同的元素,使之只剩一个2:数组中的数按照从小到大排列
3:函数返回值为删除相同的数后数组中数据的个数
还有一个问题,我一直不懂返回值是干嘛的?
#include <stdio.h> #include <time.h> #include <stdlib.h> #define LEN 26 struct foobar { int n; int c; }; int new_arr[LEN]; void sort_arr(int *p, int i) { int j, k, t = 0; i--; for(j = 0; j < i; j++) { for(k = 0; k < (i - j); k++) { if(*(p + k) > *(p + k + 1)) { t = *(p + k); *(p + k) = *(p + k + 1); *(p + k + 1) = t; } } } } int foo(struct foobar *cnt, int *old_arr) { int i, j, k=0; for(i = 1; i < LEN; i++) { for(j = 0; j < i; j++) { if(cnt[j].n == old_arr[i]) { cnt[j].c++; break; } } cnt[j].n = old_arr[i]; cnt[j].c = 1; } for(i = 0; i < LEN; i++) { if(cnt[i].c != 0) { new_arr[k] = cnt[i].n; k++; } } sort_arr(new_arr, k); return k; } int main(void) { int old_arr[LEN]={0}; struct foobar cnt[LEN]; int i = 0, len = 0; srand((unsigned int)time(NULL)); printf("\nOLD_ARR_LEN = %d\n", LEN); for(i = 0; i < LEN; i++) { old_arr[i] = 1 + (int)(15.0 * rand() / (RAND_MAX + 1.0)); printf("%d ", old_arr[i]); cnt[i].c = 0; } printf("\n"); cnt[0].n = old_arr[0]; cnt[0].c = 1; len = foo(cnt, old_arr); printf("\nNEW_ARR_LEN = %d\n", len); for(i = 0; i < len; i++) { printf("%d ", new_arr[i]); } printf("\n"); return 0; }