Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1003612
  • 博文数量: 150
  • 博客积分: 3017
  • 博客等级: 少校
  • 技术积分: 3829
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-19 14:40
个人简介

Now in Baidu WISE team

文章分类

全部博文(150)

文章存档

2014年(8)

2013年(31)

2012年(111)

分类: C/C++

2012-10-03 15:47:19

实现一个挺高级的字符匹配算法:
给一串很长字符串,要求找到符合要求的字符串,例如目的串:123
1******3***2 ,12*****3这些都要找出来.
扩展一问,匹配时要考虑顺序,如132是不匹配的,但是1*****2*3是匹配的。
这个扩展问做起来应该是比原来的复杂的。循环很多,容易出错,调了好久才过。
扩展问题代码:

点击(此处)折叠或打开

  1. /*
  2.  * =====================================================================================
  3.  *
  4.  * Filename: advstrindex.c
  5.  *
  6.  * Description:
  7.  *
  8.  * Version: 1.0
  9.  * Created: 10/03/2012 03:00:22 PM
  10.  * Revision: none
  11.  * Compiler: gcc
  12.  *
  13.  * Author: YOUR NAME (),
  14.  * Organization:
  15.  *
  16.  * =====================================================================================
  17.  */
  18. #include <stdlib.h>
  19. #include <stdio.h>

  20. void advsearch(char *input, char*pattern){
  21.     char* istart = input;
  22.     char* pstart = pattern;
  23.     while(1){
  24.         char *rstart = NULL;
  25.         char *rend = NULL;
  26.         while( *istart != *pstart && *istart){
  27.             istart++;
  28.         }
  29.         rstart = istart;
  30.         istart++;
  31.         pstart++;
  32.         while(*istart){
  33.             if(*istart == *pstart) {
  34.                 pstart++;
  35.             }
  36.             if(*pstart == '\0'){
  37.                 rend = istart;
  38.                 break;
  39.             }
  40.             istart++;
  41.         }
  42.         if(*rstart == '\0'|| !rend || !rstart) return;
  43.         istart = rstart+1;
  44.         pstart = pattern;
  45.         while(*rstart && *rend && rstart<=rend){
  46.             printf ( "%c", *rstart );
  47.             rstart++;
  48.         }
  49.         printf ( "\n" );
  50.         
  51.     }
  52. }


  53. /*
  54.  * === FUNCTION ======================================================================
  55.  * Name: main
  56.  * Description:
  57.  * =====================================================================================
  58.  */
  59.     int
  60. main ( int argc, char *argv[] )
  61. {
  62.     char input[] = "eacbabca";
  63.     char pattern[] = "abc";
  64.     advsearch(input, pattern);
  65.     return EXIT_SUCCESS;
  66. }                /* ---------- end of function main ---------- */





阅读(727) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~