题目
来源于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];
end
end
s1(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 =
logical
1
>> 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 =
logical
1
其它优秀代码
function s2 = remAin(s1)
%% Split strings
string_split = strsplit(s1,' ');
%% Replace words which ends with 'ain' to empty
x = regexprep(string_split,'\w*ain$','');
%% Convert separate cells into string
s2 = strjoin(x);
%% Find exception: when ain is inside apostrophe
[~,startIndex,endIndex] = regexp(s2, '(?<=")[^"]+(?=")', 'match');
s2(startIndex:endIndex) = [];
end