如何用matlab尋找二進位制字串中最長的「1」序列?

時間 2021-05-10 21:41:29

1樓:qwe14789cn

這個好辦,換個思路

尋找最長的1實際上是用0去分割字元,這樣子的話用現成的函式split即可s=

'100111111101010101111010100111'

;split(s

,'0'

);%用0分割字元得到元胞分割結果

cellfun

(@length

,split(s

,'0'

))%對每個元胞資料取長度

max(

cellfun

(@length

,split(s

,'0'

)))%選取最大值

2樓:

放乙個不講武德的 Cody 友好寫法:regexp(s, '(1++)(?!.*\1)', 'match', 'once')

不推薦哈

3樓:

s='1011011100001111';sm=(

regexp(s

,'1+'

,'match'))'

;strLen

=length(sm

);strMatch

=zeros

(strLen,1

);forii=

1:strLen

strMatch(ii

)=length(sm

);end

[maxStrLen

,idx]=

max(

strMatch

);maxStr=sm

;disp

(['maxStrLen: '

,num2str

(maxStrLen

)])disp

(['maxStr: '

,maxStr

])當然,應該還有更簡單又有效的方法等待我們大家去發現......

4樓:M31415926

max(diff

(find([1

(x-'1')1

])))-1

或:max(cellfun(@numel,(strsplit(x,'0'))))

5樓:易夕

MATLAB中可以用乙個for迴圈解決這一問題。s='10110001111'

;maxLen=0

;Len=0

;forii=

1:numel(s

)ifs(

ii)=='1'

Len=

Len+1;

else

maxLen

=max

(maxLen

,Len

);Len=0

;end

endmaxLen

=max

(maxLen

,Len

);result

=repmat

('1',[1

,maxLen

]);% result = '1111';

這種字串問題,應該是學C語言之類用來練手的,並不是很適合用MATLAB來寫。因為用C寫,你可以鍛鍊你的程式設計能力與邏輯思維;而MATLAB中有很多現成的函式,如果在學習階段就走捷徑,會讓你變成「調包俠」。

「調包俠」寫法,直接呼叫正規表示式來解決這一問題。

[startIdx

,endIdx]=

regexp(s

,'1+');[

~,I]

=max

(endIdx

-startIdx

);result=s

(startIdx(I

):endIdx(I

));% result = '1111'

128轉二進位制是什麼,難道是9位二進位制嗎?那是不是兩個位元組了?

California.US 128的二進位制表示是這個 int8 t 0b10000000 也就是 int8 t 0x80 對於8位有符號的0x80,符號位 最高位 為1,所以是負數。我們來驗證一下這個答案對不對 要想得到對應的正數,需要對其進行 反補碼 操作。對其減一,得到0x7F,對0x7F取反...

二進位制怎麼直接轉為八進位制?

辰璟 把乙個二進位制數分成三個一組,注意是重右往左分,不夠的數用零補,例如 1010111001 010 111,然後將每一組數用十進位制轉換,此處是二用二進位制轉換十進位制1 2 7,所以八進位制的數為127原理我解釋不清楚你自己看別人的吧 啪嗒星 通過高位補0把二進位制數字數補成3的整數倍,然後...

sed 可以修改二進位制檔案?

Mili sed可以做binary。GNU sed還專門有乙個binary flag。但是要注意,BSD sed可能會在你的binary最後加乙個 n la hoo sed是流編輯器,流既可以是字元流也可以是二進位製流,可以針對文字字元或二進位制字元進行修改替換,可以直接修改二進位制檔案。感謝mul...