题目
来源于Mathwork上的Cody,Problem 31 - Remove all the words that end with “ain”.
Given the string s1, return the string s2 with the target characters removed.
For example, given
s1 = ‘the main event’
your code would return
s2 = ‘the event’
Note the 2 spaces between “main” and “event” Only the four letters in the word “main” were deleted.
代码
function s2 = remAin(s1)ain_index=strfind(s1,'ain');del_index=[];for i=1:length(ain_index)if ain_index(i)+2==length(s1) %整个字符串以ain结尾的情况del_index=[del_index,max(strfind(s1(1:ain_index(i)),' '))+1:ain_index(i)+2];elseif s1(ain_index(i)+3)==' ' %单词以ain结尾的情况del_index=[del_index,max(strfind(s1(1:ain_index(i)),' '))+1:ain_index(i)+2];elseif s1(ain_index(i)+3)=='"' %单词用""括起来的情况del_index=[del_index,max(strfind(s1(1:ain_index(i)),' '))+2:ain_index(i)+2];endends1(del_index)=[];s2=s1;end
测试
>> s1 = 'I had to explain that "ain" is not a word';
s2 = 'I had to that "" is not a word';remAin(s1)
>> strcmp(ans,s2)ans =logical1
>> s1 = 'The pain from my migraine makes me complain';
s2 = 'The from my migraine makes me ';remAin(s1)ans ='The from my migraine makes me '
>> strcmp(ans,s2)ans =logical1
其它优秀代码
function s2 = remAin(s1)%% Split stringsstring_split = strsplit(s1,' ');%% Replace words which ends with 'ain' to emptyx = regexprep(string_split,'\w*ain$','');%% Convert separate cells into strings2 = strjoin(x);%% Find exception: when ain is inside apostrophe[~,startIndex,endIndex] = regexp(s2, '(?<=")[^"]+(?=")', 'match');s2(startIndex:endIndex) = [];end