[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Re: String Intersection. A better way

Tim Hunter

3/28/2007 12:13:00 AM

Daniel N wrote:
> Hi all,
>
> I have an issue with strings. I want the intesection of two strings
> but I'm
> not sure how to go about it. I have two cases.
>
> Case 1:
> String 1 has the tail end intersecting with the start of string 2.. eg:
>
> String 1: The quick brown fox jumped over the lazy dog.
> String 2: fox jumped over the lazy dog. And in other news bla bla bla
>
> The problem is I don't know how much is intersecting.
> What I've done is to take string 1 and say psudo code
>
> until match found
> string2 =~ /^(value of string1)/
> if match found set flag
> else delete first char of string1
> loop again
>
> What is a better way to do this?
>
> Case 2:
>
> The start of String1 intersects with the end of string2 eg:
>
> String1: And here we are with another string.
> String2: bla bla bla. And here we are
>
> I don't really know about this one yet... I haven't gotten to it.
>
> Can anyone pls suggest what I might do?
>
> Thanx
> Daniel
>
Take a look at the MatchData class, particularly the #begin and #offset
methods.

1 Answer

Rob Biedenharn

3/28/2007 1:08:00 AM

0

On Mar 27, 2007, at 8:13 PM, Timothy Hunter wrote:
> Daniel N wrote:
>> Hi all,
>>
>> I have an issue with strings. I want the intesection of two
>> strings but I'm
>> not sure how to go about it. I have two cases.
>>
>> Case 1:
>> String 1 has the tail end intersecting with the start of string
>> 2.. eg:
>>
>> String 1: The quick brown fox jumped over the lazy dog.
>> String 2: fox jumped over the lazy dog. And in other news bla bla
>> bla
>>
>> The problem is I don't know how much is intersecting.
>> What I've done is to take string 1 and say psudo code
>>
>> until match found
>> string2 =~ /^(value of string1)/
>> if match found set flag
>> else delete first char of string1
>> loop again
>>
>> What is a better way to do this?
>>
>> Case 2:
>>
>> The start of String1 intersects with the end of string2 eg:
>>
>> String1: And here we are with another string.
>> String2: bla bla bla. And here we are
>>
>> I don't really know about this one yet... I haven't gotten to it.
>>
>> Can anyone pls suggest what I might do?
>>
>> Thanx
>> Daniel
>>
> Take a look at the MatchData class, particularly the #begin and
> #offset methods.
>

What you might do is take a TDD approach (Test Driven Development)...

Change the method body until the tests pass and you're all set! Of
course, seeing the tests might help you solidify what you expect the
behavior to be.

class String
# intersection of self and other
def &(other)
''
end
end

if __FILE__ == $0
require 'test/unit'
class StringIntersectionTest < Test::Unit::TestCase
def setup
@empty = ''
end

def test_empty_string
assert_equal @empty, @empty & @empty, "empty with empty"
assert_equal @empty, 'not' & @empty, "non-empty with empty"
assert_equal @empty, @empty & 'not', "empty with non-empty"
end

def test_equal_strings
s = "Some long string that I'm ready to take to the intersection"
assert_equal s, s & s, "string with self"
end

def test_prefix
assert_equal 'f', 'f' & 'fr', 'single char string as prefix of
other'
assert_equal 'f', 'fr' & 'f', 'other is single char prefix of
string'
assert_equal 'fred', 'fred' & 'fredrick', 'multi-char string
as suffix of other'
assert_equal 'fred', 'fredrick' & 'fred', 'other is multi-char
suffix of string'
end

def test_suffix
assert_equal 'r', 'r' & 'fr', 'single char string as suffix of
other'
assert_equal 'r', 'fr' & 'r', 'other is single char suffix of
string'
assert_equal 'rick', 'rick' & 'fredrick', 'multi-char string
as suffix of other'
assert_equal 'rick', 'fredrick' & 'rick', 'other is multi-char
suffix of string'
end

def test_other_intersections
assert_equal 'site', 'new web site' & 'site-wide policy'
end

def test_other_empty_intersections
assert_equal @empty, 'fred' & 'ethel'
assert_equal @empty, 'The quick brown fox jumps over the lazy
dog.' & 'The lazy dog lies under the jumping fox.'
assert_equal @empty, 'Blah, Blah, blah' & 'yada, yada, yada'
end
end
end


Note that two of the six tests already pass just by returning the
empty string ;-)

-Rob

Rob Biedenharn http://agileconsult...
Rob@AgileConsultingLLC.com