当前位置: 首页 > 工具软件 > ain > 使用案例 >

【MATLAB编程实例练习】-(36)删除所有以“ain”结尾的单词

苏浩瀚
2023-12-01

题目

来源于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
 类似资料: