现在的位置: 首页 > 综合 > 正文

[数据结构]第三次作业:字符串替换

2013年03月14日 ⁄ 综合 ⁄ 共 1346字 ⁄ 字号 评论关闭

/* ==============  Program Description  ============= */
/*               Freshare's 3st of dswork             */
/* ================================================== */

#include<stdio.h>
#include<stdlib.h>
#define MAXSTRLEN 255

int length (char s[])  //求数组长度
{
    int i=0;
 while (s[i]!='/0')
 {i++;}
 return i;
}

/*
void get_next(SString T,int next[]) // 算法4.7

  int i=0;
  int j=0;
  next[1]=0;
  while (i<T[0]) {
    if(j==0 || T[i]== T[j]) {
      ++i;  ++j;  next[i] = j;
    } else j= next[j];
  }
  printf("%d",next[2]);
   printf("%d",next[3]);
   printf("%d",next[4]);
}

int Index_KMP(SString S, SString T) {  // 算法4.6
   int next[MAXSTRLEN];
   int i = 1;
   int j = 1;
   get_next(T, next);
   while (i <= S[0] && j <= T[0])
   {
   if (j == 0 || S[i] == T[j])
   {
      ++i;  ++j;
      }
   else j = next[j];
   }
  if (j > T[0]) return  i-T[0];
  else return 0;
}
*/

int Index (char S[], char T[])  //模式匹配算法
{
int i=0;
int j=0;
while (S[i]!='/0'&&T[j]!='/0')
{
 if (S[i]==T[j]) {++i;++j;}
 else {i = i-j+1;j=0;}
}
if ( T[j]=='/0') return i-length(T);
else return 0;
}

void main()   //主函数
{
  char str1[MAXSTRLEN];
  char str2[MAXSTRLEN];
  int position=0;
  int i,j;
  int l;
  printf("请输第一个字符串:");
  gets(str1);
  printf("请输第二个字符串:");
  gets(str2);
  l=length(str2);
  //pos=Index_KMP(str1, str2) ;
  position=Index(str1,str2) ;
  if (position==0)
      printf("没有匹配!");
  else
  {
   for(i=0;i<position;i++) {str2[i]=str1[i];}
   j=i+l;
   while(str1[j]!='/0')
   {str2[i]=str1[j]; i++; j++;}
      str2[i]='/0';
      printf(">>>>>>>>> 结果为:%s/n",str2);
  }
  getchar();
}

抱歉!评论已关闭.