std.string.strip(char[] str. char delimiters[]) - possible addition?
Derek Parnell
derek at psych.ward
Thu Mar 23 21:03:09 PST 2006
On Fri, 24 Mar 2006 11:57:57 +0800, Alan Knowles wrote:
> I needed to strip quote's from a string, and thought this may be a
> useful addition to std.string
>
> (kind of follow's PHP trim() API http://www.php.net/trim)
>
> Regards
> Alan
>
> char[] stripl(char[] s, char[] c)
> {
> uint i;
>
> for (i = 0; i < s.length; i++)
> {
> bool found = false;
> for(uint ii =0;ii < c.length; ii++) {
> if (c[ii] == s[i]) {
> found = true;
> break;
> }
> }
> if (!found)
> break;
> }
> return s[i .. s.length];
> }
>
> char[] stripr(char[] s, char[] c) /// ditto
> {
> uint i;
>
> for (i = s.length ; i > 0; i--)
> {
> bool found = false;
>
> for(uint ii =0;ii < c.length; ii++) {
>
>
> if (c[ii] == s[i-1]) {
> found = true;
> break;
> }
> }
> if (!found)
> break;
> }
> return s[0 .. i];
> }
>
> char[] strip(char[] s, char[] c) /// ditto
> {
> return stripr(stripl(s,c),c);
> }
>
Couldn't resist "D-ifying" these functions ... hope you don't mind.
char[] stripl(char[] s, char[] c)
out (result)
{
assert(result.length <= s.length);
}
body
{
if (s.length == 0 || c.length == 0)
return s;
foreach(int i, char target; s)
{
foreach(char delim; c)
{
if (delim == target)
return s[i+1..$];
}
}
return s;
}
char[] stripr(char[] s, char[] c)
out (result)
{
assert(result.length <= s.length);
}
body
{
if (s.length == 0 || c.length == 0)
return s;
for(int i = s.length-1; i >= 0; i--)
{
foreach(char delim; c)
{
if (delim == s[i])
return s[0..i];
}
}
return s;
}
char[] strip(char[] s, char[] c)
out (result)
{
assert(result.length <= s.length);
}
body
{
if (s.length == 0 || c.length == 0)
return s;
foreach(int i, char target; s)
{
foreach(int j, char delim; c)
{
if (delim == target)
// strip off matching delimiter from right.
return stripr(s[i+1..$], c[j..j+1]);
}
}
return s;
}
unittest
{
assert(stripl(" 'abc' ", "'") == "abc' ");
assert(stripr(" 'abc' ", "'") == " 'abc");
assert(strip (" 'abc' ", "'") == "abc");
assert(stripl(" 'abc' ", "'`") == "abc' ");
assert(stripr(" 'abc' ", "'`") == " 'abc");
assert(strip (" 'abc' ", "'`") == "abc");
assert(stripl(" `'abc'` ", "'`") == "'abc'` ");
assert(stripr(" `'abc'` ", "'`") == " `'abc'");
assert(strip (" `'abc'` ", "'`") == "'abc'");
assert(stripl(" '`abc`' ", "'`") == "`abc`' ");
assert(stripr(" '`abc`' ", "'`") == " '`abc`");
assert(strip (" '`abc`' ", "'`") == "`abc`");
assert(stripl(" '`abc`' ", ",") == " '`abc`' ");
assert(stripr(" '`abc`' ", ",") == " '`abc`' ");
assert(strip (" '`abc`' ", ",") == " '`abc`' ");
assert(stripl(" '`abc`' ", "") == " '`abc`' ");
assert(stripr(" '`abc`' ", "") == " '`abc`' ");
assert(strip (" '`abc`' ", "") == " '`abc`' ");
assert(stripl("", ",") == "");
assert(stripr("", ",") == "");
assert(strip ("", ",") == "");
assert(stripl(" '`abc'` ", "'`") == "`abc'` ");
assert(stripr(" '`abc'` ", "'`") == " '`abc'");
assert(strip (" '`abc'` ", "'`") == "`abc");
}
--
Derek
(skype: derek.j.parnell)
Melbourne, Australia
"Down with mediocracy!"
24/03/2006 3:56:41 PM
More information about the Digitalmars-d
mailing list