【发布时间】:2014-10-17 07:52:54
【问题描述】:
如何计算一个文本字符串中有多少个不同的字母?
【问题讨论】:
-
Google 确定 C 字符串中不同字符的数量。浏览前 10 个链接以获取想法。根据你的发现实施一些东西。 (您至少必须尝试一些事情才能让答案对您有意义)
如何计算一个文本字符串中有多少个不同的字母?
【问题讨论】:
实际上,这很简单:您只需跟踪字符串中已经遇到了哪些字符。
const char *str = "foo bar baz quirk qux";
bool found[1 << CHAR_BIT] = { 0 };
int n_distinct = 0;
for (const char *p = str; *p; p++) {
unsigned char ch = *p;
if (!found[ch]) {
n_distinct++;
found[ch] = 1;
}
}
printf("Distinct characters: %d\n", n_distinct);
【讨论】:
n_distinct 计数。注意:在深奥系统中,sizeof(int)== sizeof(char) 那么1 << CHAR_BIT 是UB。
(size_t)1,但同样,sizeof(size_t) == sizeof(char) 也有可能,所以......)
sizeof(int)== sizeof(char),found[] 数组方法可能无法使用 - 数组太大了。但是对于CHAR_BIT 为 8(或 9)的合理系统,这是一个很好的方法。
创建一个名为 uniqueLetters 的 char 数组和一个名为 currentLetter 的 char。创建一个 for 循环,将 currentLetter 一个一个地设置为字符串中的每个字符。在我描述的第一个循环中嵌套另一个 for 循环,检查 currentLetter 是否在 uniqueLetters 数组中。如果它不在 uniqueLetters 数组中,则将其添加到 uniqueLetters 数组中。最后计算 uniqueLetters 数组的长度。
要记住的一点是,“s”和“S”被视为不同的字符。如果要将它们计为相同的字母,则需要添加额外的逻辑来检查该字母的小写或大写版本是否存在于 uniqueLetter 数组中。
希望这会有所帮助!
【讨论】: