,我讀了你的問題的方式,因爲標題是「一個元素比較同所有其他元素數組「,您想要查找數組中唯一元素的數量。對於數組中的每個元素,您必須找到它後面是否有重複項,但也在它之前。這是一個解決方案。我在我的例子中使用了字符數組,但是您可以很容易地將其應用於其他類型。該countUnique()
功能確實爲重複向前搜索,並且當它發現一個潛在的獨特元素,在alreadyFound()
功能檢查前面元素:
#include <stdio.h>
#include <string.h>
int countUnique(char arr[], int n);
int compareThem(char c1, char c2);
int alreadyFound(char c, char list[], int n);
int main(void)
{
char test1[] = "abcababdb";
int s_len = strlen(test1);
printf("test1: %d unique elements\n", countUnique(test1, s_len));
return 0;
}
int countUnique(char arr[], int n)
{
int no_of_unique = 0;
int f, p;
for (f = 0; f < n; f++) {
for (p = f + 1; p < n; p++) {
if(compareThem(arr[f],arr[p]) == 1)
break;
}
if (p == n && !alreadyFound(arr[f], arr, f)) {
no_of_unique++;
}
}
return no_of_unique;
}
int compareThem(char c1, char c2)
{
if (c2 - c1)
return 0;
return 1;
}
int alreadyFound(char c, char list[], int n)
{
int i;
for (i = 0; i < n; i++) {
if (c == list[i])
return 1;
}
return 0;
}
如果你增加no_of_unique後添加break語句,會發生什麼? –
@ Rusab--如果我錯了,請糾正我,但我認爲你是在詢問如何找到數組中唯一元素的數量。但是,你這樣描述的方式聽起來就像你只想要一些沒有被他們自己拷貝的元素。這對我來說似乎沒那麼有用,但也許這就是你所追求的。這是什麼? –