Переключение регистра: как сделать проверку строки без учета регистра в 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 выводить как селектор, и ускорить / упростить ваш код, не выполняя никакого теста.

Другие вопросы по тегам