From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: String filtering
Date: Wed, 28 Sep 2005 10:15:12 +0200
Date: 2005-09-28T10:14:44+02:00 [thread overview]
Message-ID: <1gdgwjo7aini9.1qzlnlpq5gsa$.dlg@40tude.net> (raw)
In-Reply-To: m38xxi6oob.fsf@rr.trudgett
On Wed, 28 Sep 2005 10:06:44 +1000, David Trudgett wrote:
> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> writes:
>
>> On Tue, 27 Sep 2005 14:42:02 +0100, Martin Dowie wrote:
>>> 2nd sentence of ARM 95 A.4.5 (76) reads:
>>>
>>> "The function To_Unbounded_String(Length : in Natural)
>>> returns an Unbounded_String that represents an uninitialized
>>> String whose length is Length."
>>
>> Ah, now I see what you meant!
>
> Yep, that's what I meant, too.
No. What Martin meant is that:
X : Unbounded_String := To_Unbounded_String (Count);
is filled with rubbish
What I meant is that:
X : Unbounded_String;
is an empty string, being formally uninitialized. You can imagine it as
Unbounded_Strings having a default constructor setting them empty.
> I've made some revisions based on various comments, and this is what I
> have at the moment (incorporating both a string and unbounded_string
> version):
>
> Space_Char : constant Character_Range := (' ', ' ');
> Lower_Chars : constant Character_Range := ('a', 'z');
> Upper_Chars : constant Character_Range := ('A', 'Z');
> Numer_Chars : constant Character_Range := ('0', '9');
> Alpha_Num_Space : constant Character_Ranges
> := (Space_Char, Lower_Chars, Upper_Chars, Numer_Chars);
> Alpha_Num_Space_Set : constant Character_Set
> := To_Set(Alpha_Num_Space);
>
>
> function Strip_Non_Alphanumeric
> (Str : in Unbounded_String) return Unbounded_String
> is
> Dest_Size : Natural := Count(Str, Alpha_Num_Space_Set);
> New_Str : Unbounded_String := Null_Unbounded_String;
You don't need initialization here. Or you can do with Dest_Size. The
parameter of To_Unbounded_String is a Natural.
> Dest_Char : Natural := 0;
> begin
> if Dest_Size > 0 then
You don't need this if. Ada's loops are safe for zero-run.
> New_Str := To_Unbounded_String(Dest_Size);
> for Src_Char in 1 .. Length(Str) loop
> if Is_In(Element(Str, Src_Char), Alpha_Num_Space_Set) then
> Dest_Char := Dest_Char + 1;
> Replace_Element
> (New_Str, Dest_Char, Element(Str, Src_Char));
> end if;
> end loop;
> end if;
> return New_Str;
> end Strip_Non_Alphanumeric;
>
>
> function Strip_Non_Alphanumeric
> (Str : in String) return String
> is
> New_Str : String(1 .. Count(Str, Alpha_Num_Space_Set));
You also can do instead:
New_Str : String(1 .. Length (Str));
and save one extra scan of the string by Count. Memory is cheap and in
worst case scenario you will allocate that amount anyway.
> Dest_Char : Natural := 0;
> begin
> if New_Str'Last > 0 then
No need in this if.
> for Src_Char in Str'Range loop
> if Is_In(Str(Src_Char), Alpha_Num_Space_Set) then
> Dest_Char := Dest_Char + 1;
> New_Str(Dest_Char) := Str(Src_Char);
> end if;
> end loop;
here you do:
return New_Str (1..Dest_Char);
Ada strings has slices!
> else
> New_Str := "";
> end if;
> return New_Str;
> end Strip_Non_Alphanumeric;
>
>> Because, assignment might reclaim the memory allocated by
>> To_Unbounded_String (Count).
>
> I assume this is left up to the compiler implementation?
Yes
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2005-09-28 8:15 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-09-27 6:27 String filtering David Trudgett
2005-09-27 7:38 ` Jacob Sparre Andersen
2005-09-27 9:13 ` David Trudgett
2005-09-27 9:49 ` Dmitry A. Kazakov
2005-09-27 11:01 ` Martin Dowie
2005-09-27 11:12 ` Martin Dowie
2005-09-27 12:54 ` Dmitry A. Kazakov
2005-09-27 13:42 ` Martin Dowie
2005-09-27 14:24 ` Dmitry A. Kazakov
2005-09-28 0:06 ` David Trudgett
2005-09-28 8:15 ` Dmitry A. Kazakov [this message]
2005-09-28 10:39 ` David Trudgett
2005-09-28 20:55 ` Simon Wright
2005-09-28 21:53 ` Martin Dowie
2005-09-28 9:08 ` Jacob Sparre Andersen
2005-09-28 9:54 ` David Trudgett
2005-09-29 14:05 ` Georg Bauhaus
2005-10-01 19:02 ` tmoran
2005-10-02 6:38 ` David Trudgett
2005-10-02 14:11 ` Martin Dowie
2005-10-02 22:40 ` David Trudgett
2005-10-03 5:56 ` Martin Dowie
2005-10-03 10:33 ` Georg Bauhaus
2005-09-28 18:21 ` Jeffrey R. Carter
2005-09-28 21:00 ` Simon Wright
2005-09-27 11:22 ` David Trudgett
2005-09-27 11:15 ` David Trudgett
2005-09-27 13:21 ` Dmitry A. Kazakov
2005-09-27 13:43 ` Martin Dowie
2005-09-28 0:51 ` David Trudgett
2005-09-28 12:02 ` Dmitry A. Kazakov
2005-09-28 13:25 ` Marc A. Criley
2005-09-29 22:42 ` Randy Brukardt
2005-09-30 17:54 ` Robert A Duff
2005-10-02 6:57 ` Steve Whalen
2005-10-02 14:14 ` Martin Dowie
2005-10-03 1:21 ` Robert A Duff
2005-10-03 7:44 ` Jacob Sparre Andersen
2005-10-03 8:56 ` Dmitry A. Kazakov
2005-10-03 9:25 ` Jean-Pierre Rosen
2005-10-03 20:17 ` Ada Notation Jeffrey R. Carter
2005-10-03 20:41 ` Georg Bauhaus
2005-10-05 17:16 ` Andre
2005-10-05 18:23 ` Ludovic Brenta
2005-10-05 18:24 ` Jeffrey R. Carter
2005-10-04 15:13 ` brian.b.mcguinness
2005-10-04 17:00 ` String filtering Robert A Duff
2005-10-05 8:19 ` Jean-Pierre Rosen
2005-10-05 11:25 ` Robert A Duff
2005-10-04 19:47 ` Björn Persson
2005-10-05 14:14 ` Dmitry A. Kazakov
2005-10-03 10:06 ` Steve Whalen
2005-10-03 17:43 ` tmoran
2005-10-03 17:59 ` Robert A Duff
2005-10-05 23:04 ` Randy Brukardt
2005-09-27 13:52 ` Jacob Sparre Andersen
2005-09-28 1:01 ` David Trudgett
2005-09-28 1:50 ` David Trudgett
2005-09-27 14:08 ` Georg Bauhaus
2005-09-27 14:09 ` Marc A. Criley
2005-09-28 1:09 ` David Trudgett
2005-09-28 21:09 ` Simon Wright
2005-09-27 17:59 ` tmoran
2005-09-28 1:20 ` David Trudgett
2005-09-27 17:47 ` Jeffrey R. Carter
2005-09-28 1:29 ` David Trudgett
2005-09-28 18:32 ` Jeffrey R. Carter
2005-09-27 7:41 ` tmoran
2005-09-27 9:17 ` David Trudgett
2005-09-28 1:54 ` Steve
2005-09-28 2:20 ` David Trudgett
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox