функция подтверждения наличия как букв, так и цифр / игнорирование эксцентов - PullRequest
3 голосов
/ 21 декабря 2011

Итак, я пытаюсь создать программу с MATLAB в соответствии с некоторыми указаниями моего учителя, и я столкнулся с некоторыми препятствиями, которые позволили бы мне получить более высокую оценку, если бы я мог их правильно понять.Вот они:

  1. Пользователю предлагается вставить строку, но она не может содержать более 20 символов.Если это так, то исключения будут игнорироваться, и строка будет сохранена с первыми 20 символами, вставленными пользователем.Как мне игнорировать исключения в строке и в любом случае сохранить ее?

  2. isletter - это функция, которая сообщает нам, являются ли все элементы буквами.В этой программе пользователя просят вставить строку, которая должна включать в себя как цифры, так и буквы, чтобы исключить строки, содержащие только буквы или только цифры, и затем я буду использовать некоторое время, чтобы продолжать запрашивать строку с этими характеристиками.,

Не могли бы вы мне помочь?Это мой первый семестр с MATLAB.Спасибо!

Ответы [ 2 ]

3 голосов
/ 21 декабря 2011

Если вы хотите запретить символы, отличные от букв и цифр (например, '/@!' или пробелы) и требует, чтобы вводимая строка имела как минимум 1 букву и 1 цифру, вы можете использовать ISSTRPROP * Функция 1003 * (более общая, чем ISLETTER ) для проверки других типов символов. Идея использовать INPUTDLG для запроса строки (как предложено в ответ Аабаза ) является хорошей, так что вот хорошее сжатое решение с использованием INPUTDLG, которое достигает того, что вы хотите:

answer = '';  %# Initialize answer to be an empty string
while any(~isstrprop(answer, 'alphanum')) || ...  %# Check for alphanumeric chars
      ~any(isletter(answer)) || ...     %# Check for at least 1 letter
      ~any(isstrprop(answer, 'digit'))  %# Check for at least 1 number
  answer = inputdlg('Enter string:');   %# Prompt for input
  answer = answer{1}(1:min(20, end));   %# Trim answer to max of 20 chars
end

Обратите внимание, как функции MIN и END используются для обрезки строки до 20 символов.

1 голос
/ 21 декабря 2011

Для первой части вашей проблемы вы можете использовать функцию Matlab inputdlg, которая запрашивает диалоговое окно, запрашивающее ввод данных пользователем. Затем вы можете обрезать ввод, как вам нравится.

Для второй части вашей проблемы функция isletter, которую вы упомянули, скажет вам для каждого символа индивидуально, являются ли они буквенными буквами, так что вы можете суммировать этот результат и проверить, например, между 1 и 19. Это скажет вам, что ваша строка содержит как буквы, так и цифры.

Наконец, вы можете поместить свой код в цикл while и изменить переменную, когда ваши условия будут выполнены, чтобы вы могли выйти за пределы цикла.

Этот пример кода демонстрирует это:

tryagain=1;
while(tryagain)
answer=inputdlg('Insert a 20 character string that contains both letters and numbers','User input');
answer=answer{1};
if(numel(answer)>20)
    answer=answer(1:20);
end
letters=sum(isletter(answer));
numbers=sum(~arrayfun(@(x)isempty(str2num(x)),answer));
if(letters>0 && numbers>0)
    tryagain=0;
end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...