annotate scripts/strings/strncmp.m @ 5566:2f5d0d8a7f13

[project @ 2005-12-06 20:42:57 by jwe]
author jwe
date Tue, 06 Dec 2005 20:42:57 +0000
parents ec8c33dcd1bf
children 86adc85cc471
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5372
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
1 ## Copyright (C) 1996, 1997 John W. Eaton
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
2 ##
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
3 ## This file is part of Octave.
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
4 ##
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
5 ## Octave is free software; you can redistribute it and/or modify it
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
6 ## under the terms of the GNU General Public License as published by
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
7 ## the Free Software Foundation; either version 2, or (at your option)
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
8 ## any later version.
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
9 ##
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
10 ## Octave is distributed in the hope that it will be useful, but
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
13 ## General Public License for more details.
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
14 ##
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
15 ## You should have received a copy of the GNU General Public License
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
16 ## along with Octave; see the file COPYING. If not, write to the Free
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
17 ## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
18 ## 02110-1301, USA.
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
19
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
20 ## -*- texinfo -*-
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
21 ## @deftypefn {Function File} {} strncmp (@var{s1}, @var{s2}, @var{n})
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
22 ## Compares the first @var{n} characters (columns) of two character
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
23 ## strings, returning true if they are the same, and false otherwise.
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
24 ##
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
25 ## @strong{Caution:} For compatibility with @sc{Matlab}, Octave's strncmp
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
26 ## function returns true if the character strings are equal, and false
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
27 ## otherwise. This is just the opposite of the corresponding C library
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
28 ## function.
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
29 ## @end deftypefn
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
30
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
31 ## Author: jwe
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
32 ## Adapted from strcmp.m by Tom Holroyd <tomh@kurage.nimh.nih.gov>
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
33
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
34 function retval = strncmp (s1, s2, n)
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
35
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
36 if (nargin != 3)
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
37 usage ("strncmp (s, t, n)");
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
38 endif
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
39
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
40 retval = false;
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
41
5443
ec8c33dcd1bf [project @ 2005-09-08 01:40:57 by jwe]
jwe
parents: 5372
diff changeset
42 if (ischar (s1))
5372
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
43 [r1, c1] = size (s1);
5443
ec8c33dcd1bf [project @ 2005-09-08 01:40:57 by jwe]
jwe
parents: 5372
diff changeset
44 if (ischar (s2))
5372
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
45 [r2, c2] = size (s2);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
46 if (r1 == r2 && c1 == c2)
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
47 if (c1 == 0)
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
48 retval = true;
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
49 else
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
50 if (c1 > n)
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
51 t1 = s1(:, 1:n);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
52 t2 = s2(:, 1:n);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
53 retval = all (all (t1 == t2));
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
54 else
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
55 retval = all (all (s1 == s2));
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
56 endif
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
57 endif
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
58 elseif (r1 == r2)
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
59 if (r1 == 0)
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
60 retval = true;
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
61 else
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
62 l1 = min(n, c1);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
63 l2 = min(n, c2);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
64 if (l1 == l2)
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
65 t1 = s1(:, 1:l1);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
66 t2 = s2(:, 1:l2);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
67 retval = all (all (t1 == t2));
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
68 endif
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
69 endif
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
70 endif
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
71 elseif (iscellstr (s2))
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
72 [r2, c2] = size (s2);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
73 if (r1 == 1)
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
74 t2 = s2(:);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
75 m = length (t2);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
76 retval = zeros (m, 1, "logical");
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
77 for i = 1:m
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
78 retval(i) = strncmp (s1, t2{i}, n);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
79 endfor
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
80 retval = reshape (retval, r2, c2);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
81 elseif (r1 > 1)
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
82 if (r2 == 1 && c2 == 1)
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
83 t2 = s2{1};
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
84 retval = zeros (r1, 1, "logical");
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
85 for i = 1:r1
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
86 retval(i) = strncmp (deblank (s1(i,:)), t2, n);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
87 endfor
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
88 else
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
89 t2 = s2(:);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
90 m = length (t2);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
91 if (m == r1)
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
92 retval = zeros (m, 1, "logical");
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
93 for i = 1:m
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
94 retval(i) = strncmp (deblank (s1(i,:)), t2{i}, n);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
95 endfor
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
96 retval = reshape (retval, r2, c2);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
97 else
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
98 error ("strncmp: nonconformant arrays");
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
99 endif
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
100 endif
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
101 endif
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
102 endif
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
103 elseif (iscellstr (s1))
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
104 [r1, c1] = size (s1);
5443
ec8c33dcd1bf [project @ 2005-09-08 01:40:57 by jwe]
jwe
parents: 5372
diff changeset
105 if (ischar (s2))
5372
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
106 retval = strncmp (s2, s1, n, "logical");
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
107 elseif (iscellstr (s2))
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
108 [r2, c2] = size (s2);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
109 if (r1 == 1 && c1 == 1)
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
110 t1 = s1{:};
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
111 t2 = s2(:);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
112 m = length (t2);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
113 retval = zeros (m, 1);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
114 for i = 1:m
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
115 retval(i) = strncmp (t1, t2{i}, n);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
116 endfor
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
117 retval = reshape (retval, r2, c2);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
118 elseif (r2 == 1 && c2 == 1)
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
119 ## retval = strncmp (s2, s1, n);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
120 t1 = s1(:);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
121 t2 = s2{:};
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
122 m = length (t1);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
123 retval = zeros (m, 1, "logical");
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
124 for i = 1:m
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
125 retval(i) = strncmp (t1{i}, t2, n);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
126 endfor
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
127 retval = reshape (retval, r1, c1);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
128 elseif (r1 == r2 && c1 == c2)
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
129 t1 = s1(:);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
130 t2 = s2(:);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
131 m = length (t1);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
132 for i = 1:m
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
133 retval(i) = strncmp (t1{i}, t2{i}, n);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
134 endfor
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
135 retval = reshape (retval, r1, c1);
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
136 else
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
137 error ("strncmp: nonconformant cell arrays");
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
138 endif
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
139 endif
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
140 endif
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
141
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
142 if (n < 1)
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
143 retval = zeros (size (retval), "logical");
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
144 endif
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
145
b4485a3ce01b [project @ 2005-05-24 15:36:45 by jwe]
jwe
parents:
diff changeset
146 endfunction