0

我正在尝试检查字符元素是否在我的输出数组中。该数组正在获取字符串中字符的频率。所以我想说当前字符是否在数组中,然后将 1 添加到频率,否则将字符添加到频率为 1 的数组中。另外,我希望表格按顺序显示前 5 个最高频率。

EX 表格应该是什么样子的:

  character: a b c d
  freqency:  1 2 3 4


string input = GetInputString(inputFileName);
char ** output; 

for (int i = 0; i < sizeof(output); i++)
{
      if (input [count] == output[i][]) // this is where my issue is
      {

            //.......
      }

}
4

2 回答 2

2

你可以std::vector<std::pair<char,int>>用来存储字符和它的计数。

string input("1212345678999");

std::vector<std::pair<char, int>> sp;
for(auto c : input)
{
  auto it = std::find_if(sp.begin(), sp.end(), 
                         [=](const pair<int, char>& p) {return p.first == c; });
  if (it != sp.end())
  {
    it->second++;  // if char is found, increase count
  }
  else
  {
    sp.push_back(std::make_pair(c, 1)); // new char, add an entry and initialize count to 1
  }
}

要按顺序显示前 5 个最高频率,您可以按count适当的顺序排序:

std::sort(sp.begin(), sp.end(), 
                      [](const pair<int, char>& p1, const pair<int, char>& p2)
                      {
                         return p1.second > p2.second; 
                      });
于 2013-10-07T05:20:55.133 回答
1

假设您的示例意味着“a”位于 0,0,“b”位于 0,2,1 位于 1,0 等,这意味着字符始终位于第一行,您只需遍历每个输入 0[x]。

// you should declare your array as an array
char output[2][26] = {0}; // {0} initialises all elements;
// ... assign values to output.

// I assume there's a count loop here, that checks for the upper bounds of input.
// ...
// You have to determine how many columns there are somehow, 
// I just made a static array of 2,26
const int columnsize = 26; 
for (int i = 0; i < columnsize;   i++)
{
  if ( input[count] == output[0][i] )
  {
        // found the character
  }
}

这是为了使您的实现工作,但有更好或至少更简单的方法来做到这一点。例如,如果您的数组大小在编译时未固定,则可以使用向量向量。或者,如果您只想跟踪字符的出现,您可以使用字符的 stl 映射来确定频率。

于 2013-10-07T05:15:17.333 回答