Searches a character vector, sorted in ascending ASCII order, for a given string and return its index.
N — Length of
vector CHY.
(Input)
Default: N = size
(CHX,1) / INCX.
STRING — Character string to be searched for in CHY. (Input)
CHX — Vector of
length N * INCX containing
character strings. (Input)
CHY is obtained from
CHX for I = 1, 2, …, N by CHY(I) = CHX(1 + (I − 1) * INCX). CHY(1), CHY(2), …, CHY(N) must be in
ascending ASCII order.
INCX —
Displacement between elements of CHX.
(Input)
INCX
must be greater than zero.
Default: INCX = 1.
INDEX — Index of
CHY pointing to
STRING.
(Output)
If INDEX is positive,
STRING is found
in CHY. If INDEX is negative,
STRING is not
found in CHY.
INDEX Location of STRING
1 thru N STRING = CHY(INDEX)
−1 STRING < CHY(1) or N = 0
−N thru −2 CHY(−INDEX − 1) < STRING < CHY(−INDEX)
−(N + 1) STRING > CHY(N)
Generic: CALL SSRCH (N, STRING, CHX, INCX, INDEX)
Specific: The specific interface name is SSRCH.
Single: CALL SSRCH (N, STRING, CHX, INCX, INDEX)
Routine SSRCH searches a vectorof character strings x (stored in CHX), whose n elements are sorted in ascending ASCII order, for a character string c (stored in STRING). If c is found in x, its index i (stored in INDEX) is returned so that xi = c. Otherwise, a negative number i is returned for the index. Specifically,
if 1 ≤ i ≤ n |
Then xi = c |
if i = −1 |
Then c < x1 or n = 0 |
if −n ≤ i ≤ −2 |
Then x−i−1< c < x−i |
if i = −(n + 1) |
Then c > xn |
Here, “<“ and “>” are in reference to the ASCII collating sequence. For comparisons made between character strings c and xi with different lengths, the shorter string is considered as if it were extended on the right with blanks to the length of the longer string. (SSRCH uses FORTRAN intrinsic functions LLT and LGT.)
The argument INCX is useful if a row of a matrix, for example, row number I of a matrix CHX, must be searched. The elements of row I are assumed to be in ascending ASCII order. In this case, set INCX equal to the leading dimension of CHX exactly as specified in the dimension statement in the calling program. With CHX declared
CHARACTER * 7 CHX(LDCHX,N)
the invocation
CALL SSRCH (N, STRING, CHX(I,1), LDCHX, INDEX)
returns an index that will reference a column number of CHX.
The routine SSRCH performs a binary search. The routine is an implementation of algorithm B discussed by Knuth (1973, pages 407−411).
This example searches a CHARACTER * 2 vector containing 9 character strings, sorted in ascending ASCII order, for the value 'CC'.
USE SSRCH_INT
USE UMACH_INT
IMPLICIT NONE
INTEGER N, INCX
PARAMETER (N=9)
!
INTEGER INDEX, NOUT
CHARACTER CHX(N)*2, STRING*2
!
DATA CHX/'AA', 'BB', 'CC', 'DD', 'EE', 'FF', 'GG', 'HH', &
'II'/
!
INCX = 1
STRING = 'CC'
CALL SSRCH (N, STRING, CHX, INCX, INDEX)
!
CALL UMACH (2, NOUT)
WRITE (NOUT,*) 'INDEX = ', INDEX
END
INDEX = 3
Visual Numerics, Inc. PHONE: 713.784.3131 FAX:713.781.9260 |