标题:串模式的匹配
取消只看楼主
寻梦飞翔
Rank: 1
等 级:新手上路
帖 子:76
专家分:9
注 册:2010-3-15
结帖率:94.12%
已结贴  问题点数:10 回复次数:9 
串模式的匹配
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100
typedef struct str
{
  char ch[MAXSIZE];
  int length;
}str;
void enstr(str ch)//输入字符串
{ int i;
  char *p;
  p=ch.ch;
  gets(p);
  while(*p)
  {
    i++;
    p++;
  }
  ch.length=i;
}
int index(str s,str t,int pos)
{
  int i=pos,j=1;
  while(i<=s.length&&j<=t.length)
  {
    if(s.ch[i]==t.ch[i])
    {
      i++;
      j++;
    }
    else
    {
      i=i-j+2;
      j=1;
    }
  }
  if(j>t.length)
  return i-t.length;
  else
  return 0;
}
main()
{ str s,t;
  int pos,pos2;
  enstr(s);
  enstr(t);
  scanf("%d",&pos);
  pos2=index(s,t,pos);
  printf("%d",pos2);
 
}

有问题,自己发现不了,麻烦高手指点一下……谢谢!
搜索更多相关主题的帖子: 模式 
2010-04-12 19:34
寻梦飞翔
Rank: 1
等 级:新手上路
帖 子:76
专家分:9
注 册:2010-3-15
得分:0 
那应该怎样初始化啊?
2010-04-12 20:54
寻梦飞翔
Rank: 1
等 级:新手上路
帖 子:76
专家分:9
注 册:2010-3-15
得分:0 
正确的代码应该怎样写啊? 谢谢……
2010-04-12 20:56
寻梦飞翔
Rank: 1
等 级:新手上路
帖 子:76
专家分:9
注 册:2010-3-15
得分:0 
#include<stdio.h>
#include<string.h>
#define maxstrlen 255
int next[50];
void Input(char c[])
{
    int i=0,j=0;
    printf("Please intput the character string:");
    while((c[++j]=getchar())!=10)i++;//这句不是很懂,麻烦解释一下,谢谢……
    c[0]=i;
}
int Index(char s[],char p[])                  //字符串匹配的简单算法
{
    int i,j,m,n,flag=0;
    i=1;j=1;
    m=p[0];
    n=s[0];
    while((j<=m)&&(i<=n))
    {
        if(s[i]==p[j])
        {
              i+=1;
            j+=1;
        }
        else{i=i-j+2;j=1;}
        if(j==m+1){flag=i-1;break;}
    }
    return (flag);
}
int Index_KMP(char s[],char p[])          //KMP算法
{
    int i,j,m,n,flag=0;
    i=1;j=1;
    m=p[0];
    n=s[0];
    while(j<=m&&i<=n)
    {
        if(s[i]==p[j])
        {
            i+=1;
            j+=1;
        }
        else j=next[j];        //模式串向右滑行j-next[j]个位置
        if(j==m+1){flag=i-1;break;}
    }
    return flag;
}
void get_next(char p[],int next[])            //求next[]数组的函数
{
    int i=1,j=0,m;
    next[1]=0;
    m=p[0];
    while(i<m)
    {
        if((j==0)||(p[i]==p[j]))
        {
            ++i;++j;
            next[i]=j;
        }
        else j=next[j];
    }
}
void main()
{
    char s[maxstrlen],p[maxstrlen];
    int f,g;
    Input(s);
    Input(p);
    get_next(p,next);
    f=Index(s,p);//使用简单算法匹配
    g=Index_KMP(s,p);//使用KMP算法匹配
    if(f==0&&g==0)printf("Sorry.\n");//匹配不成功
    else printf("Yes,%d,%d.\n",f,g);//匹配成功
}
2010-04-12 21:45
寻梦飞翔
Rank: 1
等 级:新手上路
帖 子:76
专家分:9
注 册:2010-3-15
得分:0 
就是具体怎样输入啊,我运行后没反应啊……
2010-04-12 21:56
寻梦飞翔
Rank: 1
等 级:新手上路
帖 子:76
专家分:9
注 册:2010-3-15
得分:0 
那我输入后就没有反应了?
2010-04-12 22:13
寻梦飞翔
Rank: 1
等 级:新手上路
帖 子:76
专家分:9
注 册:2010-3-15
得分:0 
下面的就不运行了
2010-04-12 22:13
寻梦飞翔
Rank: 1
等 级:新手上路
帖 子:76
专家分:9
注 册:2010-3-15
得分:0 
2010-04-12 22:17
寻梦飞翔
Rank: 1
等 级:新手上路
帖 子:76
专家分:9
注 册:2010-3-15
得分:0 
那我输入的那个怎么不行啊?
2010-04-12 22:21
寻梦飞翔
Rank: 1
等 级:新手上路
帖 子:76
专家分:9
注 册:2010-3-15
得分:0 
输入好多字符串都不行啊???
2010-04-12 22:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-302700-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.887307 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved