5.13 Class STRING |
indexing
description: "Sequences of characters, accessible through % %integer indices in a contiguous range."
class interface
STRING
creation
frozen make (n: INTEGER) -- Allocate space for at least n characters. require non_negative_size: n >= 0 ensure empty_string: count = 0
make_from_string (s: STRING) -- Initialize from the characters of s. -- (Useful in proper descendants of class STRING, -- to initialize a string-like object from a manifest string.) require string_exists: s /= Void
feature -- Initialization
from_c (c_string: POINTER) -- Reset contents of string from contents of c_string, -- a string created by some external C function. require C_string_exists: c_string /= Void
frozen remake (n: INTEGER) -- Allocate space for at least n characters. require non_negative_size: n >= 0 ensure empty_string: count = 0
make_from_string (s: STRING) -- Initialize from the characters of s. -- (Useful in proper descendants of class STRING, -- to initialize a string-like object from a manifest string.) require string_exists: s /= Void
feature -- Access
hash_code: INTEGER -- Hash code value -- (From HASHABLE.) ensure good_hash_value: Result >= 0
index_of (c: CHARACTER; start: INTEGER): INTEGER -- Position of first occurrence of c at or after start; -- 0 if none. require start_large_enough: start >= 1; start_small_enough: start <= count ensure non_negative_result: Result >= 0; at_this_position: Result > 0 implies item (Result) = c; -- none_before: For every i in start..Result, item (i) /= c -- zero_iff_absent: -- (Result = 0) = For every i in 1..count, item (i) /= c
item (i: INTEGER): CHARACTER -- Character at position i require good_key: valid_index (i)
substring_index (other: STRING; start: INTEGER) : INTEGER -- Position of first occurrence of other at or after start; -- 0 if none.
infix "@" (i: INTEGER): CHARACTER -- Character at position i require good_key: valid_index (i)
feature -- Measurement
count: INTEGER -- Actual number of characters making up the string
occurrences (c: CHARACTER): INTEGER -- Number of times c appears in the string ensure non_negative_occurrences: Result >= 0
feature -- Comparison
is_equal (other: like Current): BOOLEAN -- Is string made of same character sequence as other? -- (Redefined from GENERAL.) require other_exists: other /= Void
infix "<" (other: STRING): BOOLEAN -- Is string lexicographically lower than other? -- (False if other is void) -- (From COMPARABLE.) require other_exists: other /= Void ensure asymmetric: Result implies not (other < Current)
infix "<=" (other: like Current): BOOLEAN -- Is current object less than or equal to other? -- (From COMPARABLE.) require other_exists: other /= Void ensure definition: Result = (Current < other) or is_equal (other);
infix ">=" (other: like Current): BOOLEAN -- Is current object greater than or equal to other? -- (From COMPARABLE.) require other_exists: other /= Void ensure definition: Result = (other <= Current)
infix ">" (other: like Current): BOOLEAN -- Is current object greater than other? -- (From COMPARABLE.) require other_exists: other /= Void ensure definition: Result = (other < Current)
max (other: like Current): like Current) -- The greater of current object and other -- (From COMPARABLE.) require other_exists: other /= Void ensure current_if_not_smaller: (Current >= other) implies (Result = Current) other_if_smaller: (Current < other) implies (Result = other)
min (other: like Current): like Current) -- The smaller of current object and other -- (From COMPARABLE.) require other_exists: other /= Void ensure current_if_not_greater: (Current <= other) implies (Result = Current) other_if_greater: (Current > other) implies (Result = other)
three_way_comparison (other: like Current): INTEGER) -- If current object equal to other, 0; if smaller, -- -1; if greater, 1. -- (From COMPARABLE.) require other_exists: other /= Void ensure equal_zero: (Result = 0) = is_equal (other); smaller: (Result = -1) = Current < other; greater_positive: (Result = 1) = Current > other
feature -- Status report
empty: BOOLEAN -- Is string empty?
valid_index (i: INTEGER): BOOLEAN -- Is i within the bounds of the string?
feature -- Element change
append_boolean (b: BOOLEAN) -- Append the string representation of b at end.
append_character (c: CHARACTER) -- Append c at end. ensure item_inserted: item (count) = c one_more_occurrence: occurrences (c) = old (occurrences (c)) + 1 item_inserted: has (c)
append_double (d: DOUBLE) -- Append the string representation of d at end.
append_integer (i: INTEGER) -- Append the string representation of i at end.
append_real (r: REAL) -- Append the string representation of r at end.
append_string (s: STRING) -- Append a copy of s, if not void, at end. ensure new_count: count = old count + s.count -- appended: For every i in 1.. s.count, -- item (old count + i) = s.item (i)
fill (c: CHARACTER) -- Replace every character with c. ensure -- allblank: For every i in 1..count, item (i) = Blank
head (n: INTEGER) -- Remove all characters except for the first n; -- do nothing if n >= count. require non_negative_argument: n >= 0 ensure new_count: count = n.min (old count) -- first_kept: For every i in 1..n, item (i) = old item (i)
insert (s: like Current; i: INTEGER) -- Add s to the left of position i. require string_exists: s /= Void; index_small_enough: i <= count; index_large_enough: i > 0 ensure new_count: count = old count + s.count
insert_character (c: CHARACTER; i: INTEGER) -- Add c to the left of position i. ensure new_count: count = old count + 1
left_adjust -- Remove leading white space. ensure new_count: (count /= 0) implies (item (1) /= ' ')
put (c: CHARACTER; i: INTEGER) -- Replace character at position i by c. require good_key: valid_index (i) ensure insertion_done: item (i) = c
put_substring (s: like Current; start_pos, end_pos: INTEGER) -- Copy the characters of s to positions -- start_pos .. end_pos. require string_exists: s /= Void; index_small_enough: end_pos <= count; order_respected: start_pos <= end_pos; index_large_enough: start_pos > 0 ensure new_count: count = old count + s.count - end_pos + start_pos - 1
right_adjust -- Remove trailing white space. ensure new_count: (count /= 0) implies (item (count) /= ' ')
tail (n: INTEGER) -- Remove all characters except for the last n; -- do nothing if n >= count. require non_negative_argument: n >= 0 ensure new_count: count = n.min (old count)
feature -- Removal
remove (i: INTEGER) -- Remove i-th character. require index_small_enough: i <= count; index_large_enough: i > 0 ensure new_count: count = old count - 1
wipe_out -- Remove all characters. ensure empty_string: count = 0; wiped_out: empty
feature -- Resizing
resize (newsize: INTEGER) -- Rearrange string so that it can accommodate -- at least newsize characters. -- Do not lose any previously entered character. require new_size_non_negative: newsize >= 0
feature -- Conversion
to_boolean: BOOLEAN -- Boolean value; -- "true" yields true, "false" yields false -- (case-insensitive)
to_double: DOUBLE -- "Double" value; for example, when applied to "123.0", -- will yield 123.0 (double)
to_integer: INTEGER -- Integer value; -- for example, when applied to "123", will yield 123
to_lower -- Convert to lower case.
to_real: REAL -- Real value; -- for example, when applied to "123.0", will yield 123.0
to_upper -- Convert to upper case.
feature -- Duplication
copy (other: like Current) -- Reinitialize by copying the characters of other. -- (This is also used by clone.) -- (From GENERAL.) ensure new_result_count: count = other.count -- same_characters: For every i in 1..count, -- item (i) = other.item (i)
substring (n1, n2: INTEGER): like Current -- Copy of substring containing all characters at indices -- between n1 and n2 require meaningful_origin: 1 <= n1; meaningful_interval: n1 <= n2; meaningful_end: n2 <= count ensure new_result_count: Result.count = n2 - n1 + 1 -- original_characters: For every i in 1..n2-n1, -- Result.item (i) = item (n1 + i -1)
feature -- Output
out: STRING -- Printable representation -- (From GENERAL.) ensure result_not_void: Result /= Void
invariant
irreflexive_comparison: not (Current < Current); empty_definition: empty = (count = 0); non_negative_count: count >= 0
end
Copyright © 1995, Nonprofit
International Consortium for Eiffel mailto:nice@atlanta.twr.com Last Updated: 26 October 1997 |