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

题目

来源于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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值