明仁 發問時間: 電腦與網際網路程式設計 · 1 0 年前

Regular Expressions 求字串出現次數?

matlab的Regular Expressions 函式

是否能知道一個字串在一個集合中出現的次數呢??

例如 s={'ABC','AAB','ABB','ABC','ABC','AAA','BBB'}

求ABC出現次數

已更新項目:

延伸一個問題

那是否有functoin可以找出一個矩陣"數值"出現的次數呢??

例如

給一個一維矩陣 m=[1,2,1,3,1,2,1,1,1,3]

用一個迴圈統計出現次數來

1=

2=

3=

我寫過兩個for的迴圈的

1跟m裡面所有比

2跟m裡面所有比...

n....速度當然是O(nm)

可能用一個迴圈寫完嗎(我想到是迴圈內用function,直接得出出現次數)?

2 個解答

評分
  • Chaos
    Lv 7
    1 0 年前
    最佳解答

    若你的S是structure的話,可以利用strfind的指令來幫忙

    >> s={'ABC','AAB','ABB','ABC','ABC','AAA','BBB'}

    s =

    'ABC' 'AAB' 'ABB' 'ABC' 'ABC' 'AAA' 'BBB'

    >> a=strfind(s,'ABC')

    a =

    [1] [] [] [1] [1] [] []

    你會發現,剛好是你要的字串時,其相對的cell位置為1

    但若是要計算總和,必須將之利用cell2mat與sum來計算

    >> b=cell2mat(a)

    b =

    1 1 1

    >> sum(b)

    ans =

    3

    2008-08-20 15:05:54 補充:

    利用find指令

    m=[1,2,1,3,1,2,1,1,1,3]

    m_min=min(m);

    m_max=max(m);

    range=m_min:m_max;

    for k=1:length(range)

    total(k)=sum(find(m==range(k)));

    end

    total就是相對於最小到最大範圍的答案

    參考資料: 教學經驗
    • 登入以對解答發表意見
  • 1 0 年前

    find(m==range(k)));

    似乎是回傳條件值出現的欄編號

    不過可以用size來解

    m=[1,2,1,3,1,2,1,1,1,3]

    m_min=min(m);

    m_max=max(m);

    range=m_min:m_max;

    for k=1:length(range)

    x=find(m==range(k));

    total(k)=size(x,2);

    end

    : )

    • 登入以對解答發表意見
還有問題?馬上發問,尋求解答。