- 论坛徽章:
- 0
|
今天无意中看到一面试题,是关于把串str1中的str2串删除.
结果自己写了如下的代码,虽然能正常运行,但是我在网上
看到了一种kmp算法,看了半天没怎么明白,能否请高手用
kmp算法给我实现一下呢?谢谢,呵呵
我写的如下,写的比较乱,见谅.
- /*
- * Delete the string str2 from string str1.
- */
- #include <string.h>
- #include <stdio.h>
- int del_str(char *str1,const char *str2)
- {
- const char *p2 = str2;
- char *p1 = str1;
- char *tmp = NULL;
- int p1_length = strlen(p1);
- int p2_length = strlen(p2);
- int same = 0;
- int i;
- if (p1_length < p2_length) {
- return -1;
- }
- while (1) {
- if (*p2 == *p1) {
- if (same == 0) {
- tmp = p1;
- }
- same++;
- if (same == p2_length) {
- p1 = tmp;
- for (i = 0; *(tmp+i) != '\0' ;i++) {
- *(p1++) = *(tmp+same+i);
- }
- *p1 = '\0';
- return same;
- } else if (same < p2_length) {
- p1++;
- p2++;
- }
- } else {
- same = 0;
- p1++;
- p2 = str2;
- if (*(p1) == '\0') {
- return same;
- }
- }
- }
- }
- int main(int argc,char *argv[])
- {
- if (argc < 3) {
- fprintf(stderr,
- "Useage com str1 str2\n");
- return -1;
- }
- int n;
- if ((n = del_str(argv[1],argv[2])) == 0) {
- fprintf(stderr,
- "No matched the str2 in str1\n");
- } else if (n < 0 ) {
- fprintf(stderr,
- "The str2's length is longer then str1's length\n");
- } else {
- printf("The result string is %s\n",argv[1]);
- fflush(stdin);
- }
- return 0;
- }
复制代码
[ 本帖最后由 fydream 于 2008-1-9 19:28 编辑 ] |
|