![](/img/trans.png)
[英]Convert two dimensional array to a one dimension by using pointer in C language
[英]Constraint to array dimension in C language
int KMP( const char *original, int o_len, const char *substring, int s_len ){
if( o_len < s_len )
return -1;
int k = 0;
int cur = 1;
int fail[ s_len ];
fail[ k ] = -1;
while( cur < s_len ){
k = cur - 1;
do{
if( substring[ cur ] == substring[ k ] ){
fail[ cur ] = k;
break;
}else{
k = fail[ k ] + 1;
}
}while( k );
if( !k && ( substring[ cur ] != substring[ 0 ] ) ){
fail[ cur ] = -1;
}else if( !k ){
fail[ cur ] = 0;
}
cur++;
}
k = 0;
cur = 0;
while( ( k < s_len ) && ( cur < o_len ) ){
if( original[ cur ] == substring[ k ] ){
cur++;
k++;
}else{
if( k == 0 ){
cur++;
}else{
k = fail[ k - 1 ] + 1;
}
}
}
if( k == s_len )
return cur - k;
else
return -1;
}
這是我曾經編碼的KMP算法。 當我今天早上回顧它時,我發現一個整數數組被定義為int fail [s_len]很奇怪。 規范是否要求數組的維數為編譯時常數? 此代碼如何通過編譯? 順便說一句,我的gcc版本是4.4.1。 提前致謝!
在C99中,將使用變量作為維度定義數組的功能添加到了C中。 一些C ++編譯器也支持將其作為擴展,但它不是C ++標准的一部分,也不會成為C ++ 0x的一部分。 如果您打算移植到C89編譯器或C ++,則最好不要使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.