计算字符数并以c ++显示时间

时间:2015-11-21 07:55:48

标签: c++

假设我有一个包含文本消息的字符数组,例如:

"abccddcabbef"

现在我想计算字符的数量并显示每个字符的时间。结果将是两个数组:

char a[6] = {'a', 'b', 'c', 'd', 'e', 'f'}    // array of character
int b[6] = {2, 3, 3, 2, 1, 1}   // appear time

这是最好的方法吗?

抱歉我的英语!

3 个答案:

答案 0 :(得分:1)

为什么不这样做:创建一个std::unordered_map,其键是字符,其值是int。

所以例如:

    unordered_map<char, int> map;
    string inputText;
    for (int i = 0; i < inputText.size(); ++i)
        {
           map[inputText[i]]++;
        }

现在你可以遍历这个地图了,你可以找到你到目前为止看到的地图键的实际角色,以及每个角色到地图出现的次数&#39 ; s值。

答案 1 :(得分:0)

好吧,如果假设输入字符串str小于128,那么你知道总是会有少于strlen(str)个唯一字符。

因此你可以这样做:

std::string str = "abcabx";
char a[str.length()];
unsigned size[str.length()];

// zero arrays
memset(a, 0,  str.length());
memset(size, 0, str.length() * sizeof(unsigned));

unsigned num_unique = 0;
for (char x : str) {
  unsigned i = 0;
  while (a[i] != '\0' && a[i] != x) ++i;
  num_unique = std::max(i+1, num_unique);
  a[i] = x;
  ++size[i];
}

for (unsigned i = 0; i < num_unique; ++i) {
  std::cout << a[i] << " - " << size[i] << std::endl;
}

答案 2 :(得分:0)

我的回答是基于您预先知道结果需要的数组长度的假设。如果您事先不知道该信息,我建议使用char的List或ArrayList。

但是,根据你的问题,这就是我要做的。

int aCurrentIndex = 0;
for (i = 0; i  < origArray.length; i++) {
    if (!a.contains(origArray[i])) {
        a[aCurrentIndex] = origArray[i];
        b[aCurrentIndex] = 1;
        aCurrentIndex++;
    }
    else {
        b[a.indexOf(origArray[i])] = b[a.indexOf(origArray[i])] + 1;
    }
}

在else语句中,您可以使用以下内容,但我还没有对其进行测试,并且不想告诉您错误。

b[a.indexOf(origArray[i])]++;