PL/SQL

2016-03-22 9 views
1

içinde verilen bir harfin kaç kelimeye sahip olduğu nasıl sayılır Diğer programlama dillerindeki kolay bir sorunu çözmeye çalışıyorum ancak PL/SQL'de işleyemiyorum. PL/SQL'de yeni başladığımı belirtmek zorundayım.PL/SQL

Sorun şu şekilde ses veriyor: Boşluklarla ayrılmış birçok kelime içeren bir dizim var ve kompozisyonlarında "u" harfinin kaç kelimeye sahip olduğunu saymalıyım.

Bu soruna bir şey yaptım, ama aradığım şey değil. Kodumda, tüm dizede kaç tane "u" olduğunu sayıyorum. Herhangi bir fikir? Teşekkürler.

set serveroutput on; 
DECLARE 
    v_sir VARCHAR2(225) := 'grass car unity united car until'; 
    v_I NUMBER := 1; 
    v_count NUMBER := 0; 
BEGIN 
    WHILE v_I <= LENGTH(v_sir) 
    LOOP 
     IF substr(v_sir, v_I, 1) IN ('u', 'U') THEN 
      v_count := v_count + 1; 
     END IF; 
     v_I := v_I + 1; 
    END LOOP; 
dbms_output.put_line('The number of "u" is: ' || v_count); 
END; 

cevap

3
SET SERVEROUTPUT ON; 
DECLARE 
    v_sir VARCHAR2(225) := 'grass car unity united car until unusual'; 
    v_count NUMBER  := REGEXP_COUNT(v_sir, '\S*u\S*'); 
BEGIN 
    dbms_output.put_line('The number of words containing "u" is: ' || v_count); 
END; 
/

Çıkışlar 4

+0

O (1) yaklaşımını beğeniyorum. Yanıtımı dizge olarak bir boşluk ile ayırmak için bir SQL olarak yanıtlamak üzereydim ve sonra 'IN' ve 'COUNT (*) 'için' INSTR 'kontrol et. Ama sanırım buna hiçbir yerde yakın olmayacaktı. – ruudvan

0

düzenli ifade yaklaşımı basittir ve hiç bir PL/SQL gerekmez - Eğer sadece düz SQL diyebiliriz. Ama bunu bir egzersiz olarak yapıyorsanız ve gerçekten zor kaba kuvvetli bir şekilde yapmak istiyorsanız, ipte karakterlerin üzerinden geçebilir, kelime sınırlarını bulmak için boşluklar (veya isterseniz herhangi bir boşluk karakteri) arayabilirseniz, olduğunda gerçek dünyada böyle bir şey yapmak için hiçbir neden yok,

set serveroutput on; 
declare 
    v_sir varchar2(225) := 'grass car unity united car until unused nu'; 
    v_word_has_u boolean := false; 
    v_count number := 0; 
begin 
    for v_i in 1..length(v_sir) loop 
    if substr(v_sir, v_i, 1) = ' ' then 
     -- new word; can look for other whitespace characters too 
     -- reset flag so we start looking for 'u's again 
     v_word_has_u := false; 
    elsif v_word_has_u then 
     -- already counted this word 
     continue; 
    elsif substr(v_sir, v_i, 1) in ('u', 'U') then 
     -- first u/U in the word we're looking at, so incremment counter 
     v_count := v_count + 1; 
     -- set flag so we don't count any more from this word 
     v_word_has_u := true; 
    end if; 
    end loop; 
    dbms_output.put_line('The number of words with "u" is: ' || v_count); 
end; 
/

PL/SQL procedure successfully completed. 

The number of words with "u" is: 5 

Ama bu bir egzersiz olarak saf olduğunu almanın doğasında: ve sadece 'u zaten görmedim deyişle var görünümlerini saymak İşlevsel olarak kullanabilirsiniz.

İlgili konular