問題:采用順序結構存儲串,編寫實現一個串通配符匹配的算法,其中通配符為“?”,它可以和任何字符匹配成功,例如pattern_index("?re","there are")返回結果為2. 遇到的問題:stack around the variable “XX” was corrupted, 解答:關於MSDN的解釋是在堆棧外面讀寫某數據。錯誤是名為RTC1的編譯器檢測的。又看了更多的技術文章,發現這樣的錯誤是程序員在項目到了一定大的時候,它占用的堆棧量就比較大。我也深有體會。因為自己本來編寫一個類,運行時沒有錯,但是在添加成員屬性的時候,在其它方式不變的情況下就容易發生這樣的錯誤。所以據此我猜應該是VS2005(2008)在內部就限定了堆棧的大小,當項目足夠大的時候,就會溢出。
int pattern_index(SqString s,SqString t) { int i=0,j=0; while(i<s.length&&j<t.length) { if(s.data[i]==t.data[j]||t.data[j]=='?') { i++; j++; } else { i=i-j+1; j=0; } } if(j>=t.length) return (i-t.length); else return -1; }