如何打印有序C ++字符串数组的直方图?

时间:2017-05-31 12:28:17

标签: c++ arrays string

我读了一个给定的文本文件,然后用文本文件中的每个单词填充我的数组(我检查一下,确保文件不超过100个单词,最多存储单词数)。我按字母顺序排序(使用冒泡排序),然后按顺序得到一堆单词的数组,发生的次数不同,例如:

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

我需要打印一个直方图,其中每个单词的每个单词后跟一个'x'(创建一个直方图):

alpha:xx

bravo:x

查理:xxx

依旧......

我想我的问题是,我应该编辑数组,摆脱重复的元素,还是只打印每个唯一元素的第一次出现,然后是多少次?如果我删除重复的元素,我的方法是返回到我读过的字符串,并计算该单词出现的次数。我更倾向于离开阵列,只打印第一个唯一的事件,然后每次出现一个'x',但我不知道如何实现它。

我不允许地图/使用矢量等。

3 个答案:

答案 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,如果不打印带有第一个出现标记的新元素。

我没有故意给出实现或完全精确的算法,因为它似乎是一种练习。