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...