나는 주어진 문자열에서 대문자의 수를 세는 가장 짧고, 가장 단순하고 가장 우아한 방법을 찾고있다.php로 문자열의 대문자를 계산하는 가장 간단한, 가장 짧은 방법은 무엇입니까?
답변
function count_capitals($s) {
return strlen(preg_replace('![^A-Z]+!', '', $s));
}
cletus cant write code. 그것은 어디서 왔는가? –
다양한 언어의 특수 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 ..."의 첫 번째 단락과 함께 3000 초 반복 실행하는 데는 0.03 초이며 함수 * capital \ _letters를 통해 동일한 문자열을 실행하려면 1.8 초입니다. 3000 번. –
나는 어쩌면 우아하지만, 도움이되지 다른 솔루션 줘야 할 것 :
$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 ($ str을)를)
그래서 나는 소문자 강조 문자로도 작동 자신의 버전을 개선하기 위해 작은 수정을했다 가장 우아한! = 코드 골프 –str_replace (range ('A', 'Z'), '', $ str, $ num_caps); echo $ num_caps; – GZipp