【发布时间】:2021-10-06 01:39:48
【问题描述】:
假设我有一个字符串string str;,其中包含任意数量的字母,我想计算字符串中每个字母的数量。例如,单词"Example" 有2 个'e'、1 个'x'、1 个'a'、1 个'm'、1 个'p' 和1 个'l'。有没有比这更有效的方法来检查每个字母?
for (int i = 0; i < str.length(); i++)
{
if (str.at(i) == 'a')
{
//variable which keeps track of a ++
}...
//25 more of that for each other letter
}
感觉必须有一种更有效的方法来做到这一点,但我不知道怎么做。请赐教。
【问题讨论】:
-
使用数组大小为 ascii 表的大小,然后您可以轻松计算每个字符。数组[字符]++
-
或者更确切地说是
array[(unsigned char)character],因为chars 可能会签名也可能不会签名。 -
附带说明:在此示例中使用
at()是多余的,因为for循环确保它不会超出字符串的范围,因此无需对每个范围进行检查特点。使用str[i]而不是str.at(i) -
@Wahalez -- 关闭,但使用
char可以容纳的可能值的数量,即1u << CHAR_BIT。计数时字符编码无关紧要。