Switch Case where case is a word_anynumber
3 次查看(过去 30 天)
显示 更早的评论
I am trying to make a switch case where the case is satisfied by the following:
word_anynumber (ie word_1 or word_2 etc)
what do i do to achieve this?
The issue is that i want the case to do the same thing for any case with word_#, but i don't want to create cases for each number because i have a variable number of numbers each time this script runs.
Any help would be greatly appreciated.
-Jonathan
0 个评论
采纳的回答
Daniel Shub
2011-11-15
A regular expression might be useful for this type of task. Using the following as the test case:
a = cellstr([repmat('word_', 100, 1), num2str((0:99)', '%02d')]);
b = cellstr([repmat('Word_', 100, 1), num2str((0:99)', '%02d')]);
c = cellstr([repmat('xword_', 100, 1), num2str((0:99)', '%02d')]);
x = [a;b;c];
The following:
~cellfun(@isempty, regexp(x, 'word_[0-99]', 'matchcase'));
will return true for any x that is word_# and fail on case changes. How to build your case/switch around this is not clear (it seems like an if/elseif/else problem to me.
更多回答(2 个)
Fangjun Jiang
2011-11-14
Use strfind(), strcmp() or strmatch(). You may also consider use "if-else" rather than 'case-switch"
if strfind(StrVariable,'word_')
1 个评论
Daniel Shub
2011-11-15
I think this will evaluate to true if StrVariable is of the form * word_*. It doesn't require word to be the first element, numbers to follow the underscore, or the numbers to be the final elements.
Jonathan
2011-11-14
If all of your cases are similar to what you describe, then you can use strtok like this.
a = 'word_4';
b = 'word_27';
c = 'byte_3';
d = 'bit_14';
switchStr = a;
switch strtok(switchStr, '_')
case 'word'
disp('word')
case 'byte'
disp('byte')
case 'bit'
disp('bit')
otherwise
disp('otherwise')
end
This displays 'word'. Try repeating this with switchStr set to b, c, and d.
6 个评论
Jonathan
2011-11-15
strtok does work in this case since "strtok('apple', '_')" returns the string "apple".
Jonathan
2011-11-15
a = 'apple';
b = 'orange';
c = 'banana';
d = 'grape_1';
e = 'grape_2';
f = 'grape_3';
switchStr = d; % goes through a through f
switch strtok(switchStr, '_')
case 'apple'
disp('apple')
case 'orange'
disp('orange')
case 'banana'
disp('banana')
case 'grape' % this is where i have a problem
disp('grapes')
end
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Characters and Strings 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!