用c++计算字符数和出现时间

Count number of characters and appear time in c++

本文关键字:时间 c++ 计算 字符      更新时间:2023-10-16

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

"abccddcabbef"

现在我想数一下角色的数量和每个角色的出现时间。结果将是两个阵列:

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

哪种方法最好?

对不起我的英语!

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

例如:

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

现在,您可以迭代这个映射,并可以找出到目前为止您所看到的实际字符作为映射的键,以及到目前为止每个字符出现的次数作为映射的值。

我的答案是基于这样一个假设,即您提前知道结果所需的数组长度。如果你事先不知道这些信息,我建议使用List或ArrayList的char。

但是,根据你的问题,这是我会做的

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])]++;

好吧,如果假设输入字符串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] != '' && 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;
}