2015-12-08 23 views
0

我已經生成了具有更多參數的結構,其中一個被稱爲'category'。有4個獨特的類別,然後,它們被複制。我想要做的是將這4個獨特的類別保存到字符串數組中,當我嘗試將所有類別保存到具有大量重複項的數組中時。在structrues中對結果進行排序[C++]

void getCategories(financeStruct *financeData, unsigned int dataCount) 
{ 
    string categ[dataCount]; 
    unsigned int i; 
    bool doIt = true; 
    for (unsigned int i = 0; i < dataCount; i++){ 
     for (unsigned int j = 0; j < dataCount; j++){ 
      if (categ[j] == financeData[j].name) 
       continue; 
      else 
       categ[i] = financeData[i].name; 
    } 

我想在我的數組中只有這些原始類別,所以當它發現重複它不會寫入數組。

+0

只需使用正確的數據類型,在這種情況下'std :: set' – Slava

+0

您只需要獲取唯一類別?你需要計算每個類別的出現次數嗎? –

+0

只需將獨特的類別保存到數組中,不需要重複。 – MrAzgra

回答

0
string categ[4]; 
for (unsigned int j = 0; j < dataCount; j++) 
    for (unsigned int i = 0; i < 4; i++) 
     if (categ[i] == financeData[j].name) 
      break; // Have it already 
     else if (categ[i] == "") { 
      categ[i] = financeData[j].name; // Checked all earlier ones without finding it 
      break; } 

這會存儲遇到的前N個類別,只要N<=4。數組中的字符串全部初始化爲"",因此在搜索時找到的第一個""表示應該使用的下一個位置,並告訴我們我們已經搜索了所有使用的位置。如果我們遇到太多的類別,這段代碼默默地忽略了過多。

+0

在第一條if語句中,你是否指我而不是j?如果是這樣,它只保存第一類,並不是所有我想要的。 – MrAzgra

+0

我在評論前十分鐘做了一個編輯。你在編輯之前還是之後詢問?在編輯之前,我做了一個不太合理的(經過一番思考)猜測你正在做什麼)。如果你的意思是在編輯之後,我認爲你誤解了代碼。如果你誤解了代碼,你需要知道'break'打破了繼續外部循環的內部循環,這就是外部循環必須跨越'financeData'的原因。你的原始計劃外部循環通過'categ []'很難得到正確的結果。 – JSF

+0

不,我在編輯之前評論過,我嘗試了新的代碼,它效果很好。非常感謝你。 – MrAzgra