2017-05-31 45 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,如果不打印具有第一个出现标记的新元素。

我没有给出实现,也没有完全确切的算法,因为它看起来像一个练习。