子串的匹配是一个很常见的问题,意思就是说在一个给定的大字符串中寻找给定的子字符串。这是一个很经典的问题,包括一代宗师D.Knuth都在这个问题上有很深入的研究,并提出了所谓的KMP算法。当然这个问题的一个最直观的算法就是这里给出的回溯法。

回溯法求解子串的过程为:依次遍历大字符串和子串,当发现不相等的时候就回溯到上次起始字符的下一个字符继续,并给子串起始位置清零。当遍历完整个大字符串(没有找到)或者遍历完子串(找到)则算法退出。

实现源码为:

int FindSubString(const char* src,const char* sub)

{

       int srcl = strlen(src);

       int subl = strlen(sub);

 

       if (subl > srcl)

              return -1;

 

       int i = 0;

       int j = 0;

 

       while ((i < srcl) && (j < subl))

       {

              if (src[i] == sub[j])

              {

                     i++;

                     j++;

              }

              else

              {

                     i = i - j + 1;  //回溯,位置确定请根据已遍历字符串长度为基点计算

                     j = 0;

              }

       }

 

       if (j >= subl)

       {

              return i - subl;

       }

      

       return -1;

 

}

Posted on 2005-08-11 09:37  k_eckel's mindview  阅读(1592)  评论(0编辑  收藏  举报