Mercurial > hg > octave-nkf
diff scripts/strings/strcmp.m @ 4257:e556870ce8f0
[project @ 2003-01-02 03:14:41 by jwe]
author | jwe |
---|---|
date | Thu, 02 Jan 2003 03:14:42 +0000 |
parents | 64ca92e02a7e |
children | 48a39e2b2ab7 |
line wrap: on
line diff
--- a/scripts/strings/strcmp.m +++ b/scripts/strings/strcmp.m @@ -28,21 +28,116 @@ ## Author: jwe -function status = strcmp (s1, s2) +function retval = strcmp (s1, s2) if (nargin != 2) usage ("strcmp (s, t)"); endif - status = 0; - if (isstr (s1) && isstr(s2)) + retval = 0; + + if (isstr (s1)) + [r1, c1] = size (s1); + if (isstr (s2)) + [r2, c2] = size (s2); + if (r1 == r2 && c1 == c2) + if (c1 == 0) + retval = 1; + else + retval = all (all (s1 == s2)); + endif + endif + elseif (iscell (s2)) + [r2, c2] = size (s2); + if (r1 == 1) + t2 = s2(:); + n = length (t2); + retval = zeros (n, 1); + for i = 1:n + retval(i) = strcmp (s1, t2{i}); + endfor + retval = reshape (retval, r2, c2); + elseif (r1 > 1) + if (r2 == 1 && c2 == 1) + t2 = s2{1}; + retval = zeros (r1, 1); + for i = 1:r1 + retval(i) = strcmp (deblank (s1(i,:)), t2); + endfor + else + t2 = s2(:); + n = length (t2); + if (n == r1) + retval = zeros (n, 1); + for i = 1:n + retval(i) = strcmp (deblank (s1(i,:)), t2{i}); + endfor + retval = reshape (retval, r2, c2); + endif + endif + endif + endif + elseif (iscell (s1)) [r1, c1] = size (s1); - [r2, c2] = size (s2); - if (r1 == r2 && c1 == c2) - if (c1 == 0) - status = 1; + if (isstr (s2)) + [r2, c2] = size (s2); + if (r2 == 1) + t1 = s1(:); + n = length (t1); + retval = zeros (n, 1); + for i = 1:n + retval(i) = strcmp (t1{i}, s2); + endfor + retval = reshape (retval, r1, c1); + elseif (r2 > 1) + if (r1 == 1 && c1 == 1) + t1 = s1{1}; + retval = zeros (r2, 1); + for i = 1:r2 + retval(i) = strcmp (t1, deblank (s2(i,:))); + endfor + else + t1 = s1(:); + n = length (t1); + if (n == r2) + retval = zeros (n, 1); + for i = 1:n + retval(i) = strcmp (t2{i}, deblank (s2(i,:))); + endfor + retval = reshape (retval, r1, c1); + endif + endif + endif + elseif (iscell (s2)) + [r2, c2] = size (s2); + if (r1 == 1 && c1 == 1) + t1 = s1{:}; + t2 = s2(:); + n = length (t2); + retval = zeros (n, 1); + for i = 1:n + retval(i) = strcmp (t1, t2{i}); + endfor + retval = reshape (retval, r2, c2); + elseif (r2 == 1 && c2 == 1) + t1 = s1(:); + t2 = s2{:}; + n = length (t1); + retval = zeros (n, 1); + for i = 1:n + retval(i) = strcmp (t1{i}, t2); + endfor + retval = reshape (retval, r1, c1); + elseif (r1 == r2 && c1 == c2) + t1 = s1(:); + t2 = s2(:); + n = length (t1); + for i = 1:n + retval(i) = strcmp (t1{i}, t2{i}); + endfor + retval = reshape (retval, r1, c1); else - status = all (all (s1 == s2)); + error ("strcmp: nonconformant cell arrays"); endif endif endif