Я выполнял задачу кодирования на codewars.com, и задача состояла в том, чтобы взять строку в качестве входных данных, проверить ее на наличие дублирующих символов и вернуть количество дублированных символов. Можно предположить, что все символы будут только буквами.
Так или иначе, я получил свой код и отправил его, после чего я увидел этот код на той же проблеме в месте номер 1, 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++;
Я понял, что он проверяет, находится ли текущий символ в строке в видимом массиве, но как? Синтаксис не имеет смысла для меня, это то, что я говорю.
Спасибо всем за ваше время. Вместо этого я собирался опубликовать это в обзоре кода, но мне сказали, что это не совсем «как» сайт.