2016-10-24 232 views
0

我明白,我們可以在陣列中的每個元素與其他所有以這種方式比較:比較數組一個元素在同一陣列中所有其他元素

for (f = 0; f < length2; f++) { 
    for (p = f + 1; p < length2 ; p++) { 
     if(!(compareThem(split[f],split[p]) == 1) && (split[f] != 0) && (split[p] != 0)) { 
      no_of_unique++; 
     } 
    } 
} 

不過,我只想no_of_unique增加後使用索引p的所有元素檢查索引f的元素。然而,這會檢查元素f,其中p = f + 1,增加no_of_unique,然後檢查其他元素並針對每種情況增加它。我只需要在檢查所有元素後增加它。任何幫助,將不勝感激。

P.S compareThem函數基本上只是返回1,如果它們彼此相等。

+0

如果你增加no_of_unique後添加break語句,會發生什麼? –

+0

@ Rusab--如果我錯了,請糾正我,但我認爲你是在詢問如何找到數組中唯一元素的數量。但是,你這樣描述的方式聽起來就像你只想要一些沒有被他們自己拷貝的元素。這對我來說似乎沒那麼有用,但也許這就是你所追求的。這是什麼? –

回答

1

代替內循環的範圍內遞增no_of_unique的,則可以簡單地發現等於分裂並[f]的元素後斷裂。然後,在內部循環之外,您應該檢查是否p等於長度2,這意味着內部循環不會中斷並遍歷所有元素,直到數組結束。 (即沒有遇到相同的元素分裂[F]

for (f = 0; f < length2; f++) { 
    if (split[f] != 0) { 
     for (p = 0; p < length2 ; p++) { 
      if(f != p && (split[p] != 0) && (compareThem(split[f],split[p]) == 1)) { 
       break; 
      } 
     } 
     if (p == length2) { 
      no_of_unique++; 
     } 
    } 
} 
+1

您必須在第一個循環中將'foundUnique'設置爲'1'。 – mch

+0

@mch非常愚蠢的錯誤,是的。謝謝。 – ilim

+0

非常感謝! –

0

,我讀了你的問題的方式,因爲標題是「一個元素比較同所有其他元素數組「,您想要查找數組中唯一元素的數量。對於數組中的每個元素,您必須找到它後面是否有重複項,但也在它之前。這是一個解決方案。我在我的例子中使用了字符數組,但是您可以很容易地將其應用於其他類型。該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; 
} 
相關問題