假设我有一个包含文本消息的字符数组,例如:
"abccddcabbef"
现在我想计算字符的数量并显示每个字符的时间。结果将是两个数组:
char a[6] = {'a', 'b', 'c', 'd', 'e', 'f'} // array of character
int b[6] = {2, 3, 3, 2, 1, 1} // appear time
这是最好的方法吗?
抱歉我的英语!答案 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])]++;