我正在尝试检查输出数组中是否有字符元素。数组正在获取字符串中字符的频率。所以我想说如果当前字符在数组中然后在频率上加1,否则将字符添加到频率为1的数组中。另外,我希望表按顺序显示前5个最高频率。
表格的外观如下:
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
{
//.......
}
}
答案 0 :(得分: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;
});
答案 1 :(得分:1)
假设你的例子意味着'a'是0,0,'b'是0,2,1是等等,这意味着角色总是在第一行,你只需要遍历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地图进行频率调整。