代码如下:<br><br>#!/usr/bin/perl<br><br>use strict;<br>use Inline 'C' => q%<br> void compstr(SV* str1, SV* str2)<br> {<br> STRLEN l1, l2;<br> int i;<br> char *s1, *s2;<br> Inline_Stack_Vars;
<br> Inline_Stack_Reset;<br> s1 = SvPV(str1, l1);<br> s2 = SvPV(str2, l2);<br> for (i=0;i<l1;i++) {<br> if (s1[i] != s2[i]) {<br> Inline_Stack_Push(newSViv(i));<br>
}<br> }<br> Inline_Stack_Done;<br> }<br>%;<br><br>my $a='abcdeafaidnfiowndingfodnsingisdnsod';<br>my $b='abcbeafaidniiowndingfodnsingisdxsod';<br><br>my @r = compstr($a, $b);<br>
<br>print join(' ',@r), "\n";<br><br>程序运行结果是:3 11 31(因为是从0开始索引)。<br><br><div><span class="gmail_quote">在07-4-18,<b class="gmail_sendername">Achilles Xu</b> <<a href="mailto:formalin14@gmail.com">formalin14@gmail.com
</a>> 写道:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">毫无疑问,应该用Inline::C<br><br><div><span class="gmail_quote">在07-4-18,<b class="gmail_sendername">
Jester</b> <<a href="mailto:jester@perlchina.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">jester@perlchina.org</a>> 写道:</span><div><span class="e" id="q_11203658a6ad504c_1"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
问个问题,看看大家有没有什么高招。<br>我需要进行两个"等长"的字符串的"按位"比较,举例而言:<br>$a='abcdeafaidnfiowndingfodnsingisdnsod';<br>$b='abcbeafaidniiowndingfodnsingisdxsod';<br>我希望做成这样的一个sub,比如叫cmpstr,<br>cmpstr($a,$b)将返回一个array,其中包含了这两个字符串中所有不同的位点的位置。
<br>那么对于上面的例子也就是会返回(4,12,32)。<br>当然,这只是一个例子,我实际的应用中这两个字符串可能很长,但是肯定是等长的。<br>目前我知道可以用substr一个一个的提取然后比较,但是我觉得这样会很慢,不知道是否有更加高效的解决方案?<br>我觉得位运算的效率很高,但是对于我现在的要求好像又不太好用……<br>请大家帮忙出点高招。<br><br><br>Jester<br>_______________________________________________
<br>China-pm mailing list<br><a href="mailto:China-pm@pm.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">China-pm@pm.org</a><br><a href="http://mail.pm.org/mailman/listinfo/china-pm" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
http://mail.pm.org/mailman/listinfo/china-pm</a></blockquote></span></div></div><span class="sg"><br><br clear="all">
<br>-- <br>---------------------------<br>Achilles Xu<br><a href="http://www.lostcode.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://www.lostcode.org</a>
</span></blockquote></div><br><br clear="all"><br>-- <br>---------------------------<br>Achilles Xu<br><a href="http://www.lostcode.org">http://www.lostcode.org</a>