2009-10-13 63 views

Trả lời

39
function count_capitals($s) { 
    return strlen(preg_replace('![^A-Z]+!', '', $s)); 
} 
+2

cletus cant write code. nó từ đâu đến? –

+0

Sẽ không hoạt động với các ký tự utf-8 đặc biệt từ nhiều ngôn ngữ. –

0

Đây không phải là ngắn nhất, nhưng được cho là đơn giản nhất vì regex không phải được thực thi. Thông thường tôi muốn nói điều này sẽ nhanh hơn vì logic và kiểm tra rất đơn giản, nhưng PHP luôn làm tôi bất ngờ với tốc độ nhanh và chậm khi so sánh với những thứ khác.

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"; 
+0

Giống như trong C! – alex

+3

Chức năng * đếm \ _capitals * nhanh hơn nhiều. Với các chuỗi rất ngắn * đếm \ _capitals * chỉ nhanh hơn một chút nhưng với đoạn đầu tiên của "Lorem ipsum ..." là 0,03 giây để chạy 3000 lần lặp so với 1,8 giây để chạy cùng một chuỗi thông qua hàm * capital \ _letters * 3000 lần. –

2

tôi muốn cung cấp một giải pháp, có lẽ không tao nhã, nhưng hữu ích:

$mixed_case = "HelLo wOrlD"; 
$lower_case = strtolower($mixed_case); 

$similar = similar_text($mixed_case, $lower_case); 

echo strlen($mixed_case) - $similar; // 4 
+2

Có vẻ như giải pháp này sẽ hoạt động ngay cả đối với các chữ cái viết hoa có dấu phụ trên chúng. +1 – LittleTiger

2

George Garchagudashvili Giải pháp là tuyệt vời, nhưng nó không thành công nếu các chữ thường chứa dấu hoặc dấu.

Vì vậy, tôi đã làm một sửa chữa nhỏ để cải thiện phiên bản của mình, mà làm việc cũng với thấp hơn trường hợp nhấn mạnh chữ:

public static function countCapitalLetters($string){ 

    $lowerCase = mb_strtolower($string); 

    return strlen($lowerCase) - similar_text($string, $lowerCase); 
} 
Các vấn đề liên quan