目前程序还有缺陷,无法处理源字符串中重复出现子字符串的情况。 我似乎没有编程的天赋,这么几行代码,简单的逻辑,却费了很长时,几近痛苦的完成。 也许是努力不够吧,编程也是熟练工种,熟能生巧……在这个自我安慰睡去吧!:) include #define TRUE 1 #define FALSE 0 del_substr( char *str, char const *substr ) { char *s; char const *t; int status = FALSE; for ( s = str, t = substr; *t != '' && *s != ''; ) { if ( *s != *t ) { t = substr; status = FALSE; } if ( *s == *t ) { status = TRUE; s++, t++; } if ( status == FALSE ) { s++; } } if ( status == FALSE ) return FALSE; else { do { *( s - ( t - substr ) ) = *s; } while ( *s++ != '' ); return TRUE; } } main( void ) { char *src = "ABCDBCDEF"; char *sub = "BCD"; if ( del_substr( src, sub ) == FALSE ) printf( "not found substr: %s\n", sub ); else printf( "del substring is: %s\n", src ); } 升级版本:2005年6月20日 /* 可以处理空字符串,以及源串中有重复子串的情况 */ #include <stdio.h> #define TRUE 1 #define FALSE 0 del_substr( char *str, char const *substr ) { char *s; char const *t; int status = FALSE; int num = 0; for ( s = str, t = substr; *s != ''; ) { if ( *s != *t ) { t = substr; status = FALSE; } if ( *s == *t ) { status = TRUE; s++, t++; } if ( status == FALSE ) { /* 一直不等才s++ */ s++; } if ( *t == '' && status == TRUE ) { /* 发现子串即删除 */ num++; /* 发现子串次数计数 */ do { *( s - ( t - substr) ) = *s; } while ( *s++ != '' ); s = str, t = substr; /* 复位 */ } } if ( num == 0 ) return FALSE; else return TRUE; } main( void ) { char *src = "ABCDMBCDEF"; char *sub = "BCD"; if ( del_substr( src, sub ) == FALSE ) printf( "not found substr: %s\n", sub ); else printf( "del substring is: %s\n", src ); } |