我读了一个给定的文本文件,然后用文本文件中的每个单词填充我的数组(我检查一下,确保文件不超过100个单词,最多存储单词数)。我按字母顺序排序(使用冒泡排序),然后按顺序得到一堆单词的数组,发生的次数不同,例如:
string stringText[10] = {alpha, alpha, bravo, charlie, charlie, charlie...}
我需要打印一个直方图,其中每个单词的每个单词后跟一个'x'(创建一个直方图):
alpha:xx
bravo:x
查理:xxx依旧......
我想我的问题是,我应该编辑数组,摆脱重复的元素,还是只打印每个唯一元素的第一次出现,然后是多少次?如果我删除重复的元素,我的方法是返回到我读过的字符串,并计算该单词出现的次数。我更倾向于离开阵列,只打印第一个唯一的事件,然后每次出现一个'x',但我不知道如何实现它。
我不允许地图/使用矢量等。
答案 0 :(得分: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++;
}
输出是:
alpha:xx
bravo:x
查理:xxx
答案 1 :(得分:0)
使用地图可能很容易......但是如果你不能像那样排序的int *:
int count[nb_word];
其中
count[0]
代表第一个单词(在你的例子中为alpha)出现次数
答案 2 :(得分:0)
只要保留上一个元素,如果它与当前元素相同,则打印x
,如果不打印带有第一个出现标记的新元素。
我没有故意给出实现或完全精确的算法,因为它似乎是一种练习。