gpt4 book ai didi

C 返回重复字符的数量

转载 作者:行者123 更新时间:2023-11-30 14:38:27 24 4
gpt4 key购买 nike

我正在 codewars.com 上进行编码挑战,挑战是将字符串作为输入,检查它是否有重复字符并返回重复字符的数量。可以假设所有字符都只是字母。

所以无论如何,我让我的代码工作并提交了它,之后我在第一名的位置上看到了关于同一问题的代码,codewars.com 也让你看到其他人是如何解决这个问题的。

这里是

size_t duplicate_count(const char* text)
{
char seen[127] = { 0 };
size_t duplicates = 0;
char c;

while ((c = *text++))
{
if (seen[tolower(c)]++ == 1) duplicates++;
}

return duplicates;
}

尽管我确信这段代码非常简单,但我还是有一些不明白的地方。

1)为什么使用127作为所见字符数组的大小?字母表中有 26 个字母,并且这个人已经在 while 循环中将字符转换为小写,所以我认为您不必担心它是大写的。

2)这一行

if (seen[tolower(c)]++ == 1) duplicates++;

我知道它正在检查字符串中的当前字符是否在所见数组中,但是如何检查呢?我所说的语法对我来说没有意义。

感谢大家抽出宝贵的时间。我原本打算将其发布在代码审查上,但我被告知这并不是一个真正的“如何做”网站。

最佳答案

1) Why use 127 as the size of the seen char array?

没有明确的想法。 char 可能是有符号的,也可能是无符号的。对于有符号字符,最高值(假设 8 位字符)可以是 127。在这种情况下,数组应为 seen[128]
ASCII 127 → Delete character可能被认为是特殊的,因此预计不会发生......

2)

行:

if (seen[tolower(c)]++ == 1) duplicates++;

也可以写成:

char cLower = tolower(c);
int seenOld = seen[cLower];
++seen[cLower];
if (seenOld == 1) ++duplicates;

它利用后增量的效果,返回旧值并随后应用其效果(增量)。

对于duplicates++,返回的旧值未使用。因此,++duplicatesduplicates++ 的影响可以忽略不计。

关于C 返回重复字符的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56608614/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com