2016-09-20 2 views
0

문자열의 세 글자 단어의 첫 번째와 마지막 글자를 대문자로 변환하려고합니다. 지금까지, 우리가 그 코드의 첫 번째 4 선이 무엇이고 그 다음 다른 사람들이 어디서 찾을 수 있도록 그걸 얻기 위해 노력하고있다 있도록 3 개 글자 단어가 먼저 어디 찾아야했다문자열의 세 글자 단어의 첫 번째와 마지막 글자를 대문자로 바꾸십시오.

spaces = strfind(str, ' '); 
spaces = [0 spaces]; 
lw = diff(spaces); 
lw3 = find(lw ==4); 
a3 = lw-1; 
b3 = spaces(a3+1); 
b4 = b3 + 2 ; 
str(b3) = upper(str(b3)); 
str(b4) = upper(str(b4); 

시도 첫 글자와 마지막 글자는 무엇입니까?

+0

무엇이 질문입니까? – excaza

+0

'str'에서 대문자로 시작하는 각 단어의 첫 글자의 위치가'spaces (lw3) + 1'이 아니겠습니까? – beaker

+2

[rubber duck debugging] (https://en.wikipedia.org/wiki/Rubber_duck_debugging)을 권하고 자신의 변수 이름을 난독 화하지 않을 것을 권합니다. 짧은 변수 이름에서 아무 것도 얻지 못하면 의미있는 것을 사용하십시오. – excaza

답변

5

정규 표현식을 사용하여 3 문자 단어를 식별 한 다음 regexprep을 익명 함수와 결합하여 대/소문자 변환을 수행합니다.

str = 'abcd efg hijk lmn'; 

% Custom function to capitalize the first and last letter of a word 
f = @(x)[upper(x(1)), x(2:end-1), upper(x(end))]; 

% This will match 3-letter words and apply function f to them 
out = regexprep(str, '\<\w{3}\>', '${f($0)}') 

% abcd EfG hijk LmN 
0

확실히 정규 표현식입니다. 나는 약간 다른 경로를 제안하기 위하여려고하고있다, 그리고 그 regexpitokenExtents 플래그를 사용하여 인덱스를 반환하는 것입니다 :

str = 'abcd efg hijk lmn'; 

% Tokenize the words and return the first and last index of each 
idx = regexpi(str, '(\<w{3}\>)', 'tokenExtents'); 

% Convert those indices to upper case 
str([idx{:}]) = upper(str([idx{:}])); 

을 파일 교환에서 matlab ipusum 기능을 사용하여, 나는 평균이 1000 단락 임의의 텍스트 문자열을 생성 단어 길이 4 +/- 2

str = lower(matlab_ipsum('WordLength', 4, 'Paragraphs', 1000)); 

는 그 결과 5531 3 글자로 된 단어와 함께 177575 문자열이었다. 을 사용하여 regexprepregexpi을 사용하는 실행 시간을 확인하려면 tokenExtents으로 확인하십시오. regexpi을 사용하면 다음과 같이 빠르게 증가합니다.

regexpi = 0.013979s 
regexprep = 0.14401s 
관련 문제