Переключение регистра: как сделать проверку строки без учета регистра в Matlab
Я использую оператор switch, как это
input('Enter string:') % For example 'VALUE'
switch string
case {'Value','VALue'.....}
для всех комбинаций верхнего и нижнего регистра.
Как я могу более эффективно писать нечувствительные к регистру тесты в выражении switch?
2 ответа
Вы можете преобразовать оба значения в нижний регистр, используя lower()
и затем сравните это, например:
txt = 'Hello, World.';
newTxt = lower(txt); % newTxt = 'hello, world.'
case {'hello, world.'}
Вы можете узнать больше об этом в официальной документации: https://www.mathworks.com/help/matlab/ref/lower.html
Ты можешь использовать strcmpi
для сравнения без учета регистра в MATLAB, но вы хотите использовать if
заявления вместо переключателей...
% If you must use the 's' flag for input, it is directly stored as a string
% so you don't have to input the quotation marks!
str = input('Enter string', 's');
if strcmpi(str, 'VALUE')
% true for 'VAlue', 'VALUe', 'valUE', ...
elseif strcmpi(str, 'anothervalue')
% true for 'AnotherValue', 'ANOTHERvalue', ...
else
% Anything else
end
Вы действительно можете использовать strcmpi
на массиве ячеек, поэтому вам не нужно if
заявления на всех (в зависимости от вашего использования).
% Define your test strings
mystrings = {'abc', 'def', 'ghi', 'jkl'};
% Set text (could do via input)
str = 'def';
% Compare ALL
choice = strcmpi(str, mystrings);
>> choice = [0 1 0 0] % logical vector output
Поэтому, если вы структурируете свой код так, чтобы соответствующие операции выполнялись в матрицах или ячейках, вы можете использовать это choice
выводить как селектор, и ускорить / упростить ваш код, не выполняя никакого теста.