Я ищу самый короткий, самый простой и элегантный способ подсчета количества заглавных букв в данной строке.Простейший, самый короткий способ подсчета заглавных букв в строке с php?
ответ
function count_capitals($s) {
return strlen(preg_replace('![^A-Z]+!', '', $s));
}
cletus can not написать код. откуда это? –
Не будет работать со специальными символами utf-8 из разных языков. –
Это не кратчайший, но возможно простейший, поскольку регулярное выражение не должно быть выполнено. Обычно я бы сказал, что это должно быть быстрее, поскольку логика и проверки просты, но PHP всегда удивляет меня тем, как быстро и медленно некоторые вещи по сравнению с другими.
function capital_letters($s) {
$u = 0;
$d = 0;
$n = strlen($s);
for ($x=0; $x<$n; $x++) {
$d = ord($s[$x]);
if ($d > 64 && $d < 91) {
$u++;
}
}
return $u;
}
echo 'caps: ' . capital_letters('HelLo2') . "\n";
Как и в C! – alex
Функция * count \ _capitals * намного быстрее. С очень короткими строками * count \ _capitals * только немного быстрее, но с первым абзацем «Lorem ipsum ...» это 0,03 секунды для запуска 3000 итераций против 1,8 секунды для запуска одной и той же строки с помощью функции * capital \ _letters * 3000 раз. – 2010-11-02 02:03:35
Я хотел бы дать еще одно решение, возможно, не элегантный, но полезно:
$mixed_case = "HelLo wOrlD";
$lower_case = strtolower($mixed_case);
$similar = similar_text($mixed_case, $lower_case);
echo strlen($mixed_case) - $similar; // 4
Кажется, что это решение будет работать даже для заглавных букв с диакритикой на них. +1 – LittleTiger
Джордж Garchagudashvili Решение Удивительно, но он терпит неудачу, если строчные буквы содержат диакритические или диакритические.
Так что я сделал небольшое исправление, чтобы улучшить свою версию, которая работает также с строчными буквами акцентированы:
public static function countCapitalLetters($string){
$lowerCase = mb_strtolower($string);
return strlen($lowerCase) - similar_text($string, $lowerCase);
}
Если вы хотите обмануть: STRLEN (strtoupper ($ ул));) –
Простейшее и самый элегантный! = code golf –
str_replace (диапазон ('A', 'Z'), '', $ str, $ num_caps); echo $ num_caps; – GZipp