Weźmy jako przykład funkcję, która w łańcuchu string poszukuje znaku ogranicznika (dowolnego znaku z łańcucha delimiters), a następnie zwraca pierwszą część łańcucha (do ogranicznika) jako token, a w przypadku wywołania z dwoma argumentami wyjściowymi również pozostałą część łańcucha jako remainder. Jeśli łańcuch rozpoczyna się od ogranicznika, program poszukuje w łańcuchu pierwszego znaku niebędącego ogranicznikiem i od niego rozpoczyna dalsze działanie, function [token, remainder] = strtok(string, delimiters)
% Funkcja wymaga co najmniej jednego argumentu wejściowego if nargin < 1
error('Za mało argumentów wejściowych.');
end
token = []; remainder = []; len = length(string); if len == 0 return
end
% Jeżeli jeden argument, to ogranicznikami mogą być znaki % o kodach 9..13 i 32 (spacja) if (nargin == 1)
delimiters = [9:13 32]; % Znaki ograniczników i = 1;
% Pozycja pierwszego znaku niebędącego ogranicznikiem while (any(string(i) == delimiters)) i = i + 1;
if (i > len), return, end
end
% Pozycja pierwszego ogranicznika start = i;
while (~any(string(i) == delimiters)) i = i + 1;
if (i > len), break, end
finish = i - 1;
token = string(start:finish) ;
% Przy dwóch argumentach wyjściowych podaj pozostałą % część łańcucha (remainder) if (nargout == 2)
remainder = string(finish+1:end);
end
Oto jakie będą wyniki działania tej funkcji przy różnych wywołaniach:
» s = '1234*56 78';
» a = strtok(s)% jeden argument wejściowy 1234*56
» [a,b] = strtok(s)% j.w., dwa argumenty wyjściowe
1234*56 b =
78
» [a,b] = strtok(s, '*')% dwa argumenty WE i dwa WY a =
1234 b =
*56 78
Jeżeli funkcja może przyjmować zmienną ilość danych opcjonalnych, to jako argumentu wejściowego można użyć tablicy komórek varargin, jak to pokazano w przykładach poniżej:
function y = mfun(varargin)
% lub gdy xl i x2 - dane obligatoryjne, reszta - opcjonalnie: function y = mfun(xl, x2, varargin)