2015-05-25 32 views
1

我想修改此代码,以便如果此函数的输入包含字母'Z',它将返回一个空矢量。如果字母在字符串的开头,我可以对字母'Q'或'Z'进行这种操作,但不幸的是,如果这两个字母中的任何一个都在末尾,它就不起作用。用空矢量替换字符串

function d = change(a) 
new_claim = regexprep(a, 'A', '2'); 
new_claim1 = regexprep(new_claim, 'B', '2'); 
new_claim2 = regexprep(new_claim1, 'C', '2'); 
new_claim3 = regexprep(new_claim2, 'D', '3'); 
new_claim4 = regexprep(new_claim3, 'E', '3'); 
new_claim5 = regexprep(new_claim4, 'F', '3'); 
new_claim6 = regexprep(new_claim5, 'G', '4'); 
new_claim7 = regexprep(new_claim6, 'H', '4'); 
new_claim8 = regexprep(new_claim7, 'I', '4'); 
new_claim9 = regexprep(new_claim8, 'J', '5'); 
new_claim10 = regexprep(new_claim9, 'K', '5'); 
new_claim11 = regexprep(new_claim10, 'L', '5'); 
new_claim12 = regexprep(new_claim11, 'M', '6'); 
new_claim13 = regexprep(new_claim12, 'N', '6'); 
new_claim14 = regexprep(new_claim13, 'O', '6'); 
new_claim15 = regexprep(new_claim14, 'P', '7'); 
new_claim16 = regexprep(new_claim15, 'R', '7'); 
new_claim17 = regexprep(new_claim16, 'S', '7'); 
new_claim18 = regexprep(new_claim17, 'T', '8'); 
new_claim19 = regexprep(new_claim18, 'U', '8'); 
new_claim20 = regexprep(new_claim19, 'V', '8'); 
new_claim21 = regexprep(new_claim20, 'W', '9'); 
new_claim22 = regexprep(new_claim21, 'X', '9'); 
new_claim23 = regexprep(new_claim22, 'Y', '9'); 
new_claim24 = regexprep(new_claim23, '-', ' '); 
new_claim25 = regexprep(new_claim24, '(', ''); 
new_claim26 = regexprep(new_claim25, ')',''); 
d = new_claim26; 
if strfind(d,'Q') == true 
    d = []; 
elseif strfind(d,'Z') == true 
    d = []; 
else 
    return; 
end 

回答

2

如果这是你的愿望,以检查是否字符串包含字母Zz,也许把这个在你的代码的开头:

if ~isempty(regexp(a, '[Zz]')) 
    d = []; 
    return; 
end 

如果你也想检查Qq,你可以这样做:

if ~isempty(regexp(a, '[ZzQq]')) 
    d = []; 
    return; 
end 

以上使用正则表达式,看看是否有任何characte rs包含Zz(或Qq,取决于您想要的)。 regexp返回找到这些字符的索引。如果发现Zz(或Qq字符,取决于您想要的字符),则索引将为非空,因此将检查~isempty。如果找不到Zz(或Qq)个字符,则该字符将为空,因此会跳过此语句。重要的是,如果我们发现Z,z(或Q,q)字符,我们立即使d为空并且返回,以便其余逻辑不运行。

然后,您可以继续执行其余的代码。

1

你可以检查一个字符是否在字符串中:any(d == 'Q') || any(d == 'Z')