2017-05-31 70 views
0

我讀了一個給定的文本文件,然後用文本文件中的每個單詞填充我的數組(我做了一個檢查以確保文件不超過100個單詞,存儲單詞數量最多)。我字母順序排序它們(使用冒泡排序),然後得到的一堆爲了字的陣列,產生不同量的時間,以便例如:如何打印有序C++字符串數組的直方圖?

string stringText[10] = {alpha, alpha, bravo, charlie, charlie, charlie...} 

我需要打印的直方圖,其中我有每個字隨後的 'x' 的字的每次出現時(以創建直方圖):

阿爾法:XX

喝彩:X

查理:XXX

等等...

我的問題我想是應該編輯數組,擺脫重複的元素還是隻打印每個獨特元素的第一次出現,然後再出現多少次?如果我刪除重複的元素,我的方法是回到我讀的字符串中,並且只計算該單詞出現的次數。我更傾向於離開數組,只是打印第一個唯一的事件,然後每個事件都有一個'x',但我不確定如何實現該事件。

我不能映射/使用矢量等

+0

是否所有你需要做的就是讓一個直方圖?如果是這樣的話,你可以將文件讀入一個'std :: map'中,並一次構建直方圖。 – NathanOliver

+0

我寫了一個anser,但刪除了它,因爲我忽略了一個小而重要的細節:你的輸入數組已經排序。其實現在我不清楚問題是什麼。你應該展示你的方法以及爲什麼它不起作用。任何代碼都比沒有代碼更好。另見[mcve] – user463035818

回答

1

下面的代碼需要排序,不限制單詞數量。

const int wordCount = 6; 
string stringText[wordCount] = {"alpha", "alpha", "bravo", "charlie", "charlie","charlie"}; 
int counter = 0; 

while(counter<wordCount) 
{ 
    cout<<stringText[counter]; 
    cout<<" : x"; 
    for(int i=counter+1;i<wordCount;++i) 
    { 
     if(stringText[i]==stringText[counter]) 
     { 
      cout<<"x"; 
      counter++; 
     } 
    } 
    cout<<endl; 
    counter++; 
} 

,輸出是:

阿爾法:XX

喝彩:X

查理:XXX

+0

謝謝!這太棒了! –

0

可以很容易與地圖......但如果你不能做一個int *排序這樣的:

int count[nb_word]; 

count[0] 

代表的第一個字(在你的阿爾法爲例)occurence

0

的數量只要保持上10如果它與當前的元素相同,則打印x,如果不打印具有第一個出現標記的新元素。

我沒有給出實現,也沒有完全確切的算法,因爲它看起來像一個練習。