数据结构字符串匹配——Brute-Force算法

在数据结构的书上有这个问题的描述。

问题描述:已知一字符串str,并给出字串sub_str,然后判断sub_str是不是在str中,并且输出相应的信息。

算法描述:使用三个指示器——i, j, start。

start:表示每趟比较的时候str的起点。

i:表示在每趟比较当中,str的移动指针。

j:表示在每趟比较当中,sub_str的移动指针。

  1. #include <stdio.h>
  2. #include <string.h>

  3. #define M 20

  4. int main()
  5. {
  6.     char str[M], sub_str[M];
  7.     int i, j, start;

  8.     fprintf(stdout, "Input string:\n");
  9.     fscanf(stdin, "%s", str);
  10.     fprintf(stdout, "Input sub string:\n");
  11.     fscanf(stdin, "%s", sub_str);
  12.     
  13.     start = 0;
  14.     i = start;
  15.     j = 0;
  16.     while(i < strlen(str) && j < strlen(sub_str)) {
  17.         if(str[i] == sub_str[j]) {
  18.             i++;
  19.             j++;
  20.         } else {
  21.             start++;
  22.             i = start;
  23.             j = 0;
  24.         }
  25.     }
  26.     
  27.     if(j == strlen(sub_str)) {
  28.         printf("match successfully~\n");
  29.     } else {
  30.         printf("match unsuccessfully~\n");
  31.     }

  32.     return 0;
  33. }

测试结果:

  1. ^_^[sunny@sunny-laptop ~/DS]102$ ./a.out
  2. Input string:
  3. abcdefg
  4. Input sub string:
  5. abc
  6. match successfully~
  7. ^_^[sunny@sunny-laptop ~/DS]103$ ./a.out
  8. Input string:
  9. abcdefg
  10. Input sub string:
  11. hi[]
  12. match unsuccessfully~

<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(775) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

sunjiangang-ok2011-08-28 07:56:55

zhanglistar: 博主这个不是很高效的。首先start变量是不需要的。
其次,失配时 应该让  i 滑的更远。
改为: i = i - j + 1;.....
哦,zhanglistar说得对,谢谢~

zhanglistar2011-08-27 22:56:38

博主这个不是很高效的。首先start变量是不需要的。
其次,失配时 应该让  i 滑的更远。
改为: i = i - j + 1;

评论热议
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值