代码如下:<br><br>#!/usr/bin/perl<br><br>use strict;<br>use Inline &#39;C&#39; =&gt; q%<br>&nbsp;&nbsp;&nbsp; void compstr(SV* str1, SV* str2)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; STRLEN l1, l2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char *s1, *s2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Inline_Stack_Vars;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Inline_Stack_Reset;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s1 = SvPV(str1, l1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s2 = SvPV(str2, l2);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i=0;i&lt;l1;i++) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (s1[i] != s2[i]) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Inline_Stack_Push(newSViv(i));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Inline_Stack_Done;<br>&nbsp;&nbsp;&nbsp; }<br>%;<br><br>my $a=&#39;abcdeafaidnfiowndingfodnsingisdnsod&#39;;<br>my $b=&#39;abcbeafaidniiowndingfodnsingisdxsod&#39;;<br><br>my @r = compstr($a, $b);<br>
<br>print join(&#39; &#39;,@r), &quot;\n&quot;;<br><br>程序运行结果是:3 11 31(因为是从0开始索引)。<br><br><div><span class="gmail_quote">在07-4-18,<b class="gmail_sendername">Achilles Xu</b> &lt;<a href="mailto:formalin14@gmail.com">formalin14@gmail.com
</a>&gt; 写道:</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> &lt;<a href="mailto:jester@perlchina.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">jester@perlchina.org</a>&gt; 写道:</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>我需要进行两个&quot;等长&quot;的字符串的&quot;按位&quot;比较,举例而言:<br>$a=&#39;abcdeafaidnfiowndingfodnsingisdnsod&#39;;<br>$b=&#39;abcbeafaidniiowndingfodnsingisdxsod&#39;;<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>