?? bm.cpp
字號:
#include <stdio.h>
#include "iostream.h"
char t[1000],p[50],q[50];
int l,n,m,k,j=0,i=0,h=0;
int a;
int Pdist(char x)//求出dist[c]的值
{
int a=0,b,flag=0;
while(a<m-1&&flag==0)
{
if(x!=p[a]) a++;
else flag=1;
}
if(flag==0) return m;//字符不出現在模式串中
else //字符出現在模式串中
{
for(a=0;a<m-1;a++)
if(x==p[a]) b=a;
b=m-b-1;
return b;
}
}
void Text()
{
cout<<"請輸入正文串,并以$結束:\n";
do
{
cin >> t[i];
i++;
}
while(t[i-1]!='$' && i<=100);
n=i-1; //正文串長度
t[i-1]='\0';
}
void Pattern()
{
j=0;
do
{
cin >>p[j];
j++;
}
while(p[j-1]!='$' && j<=50);
m=j-1; //模串長度
}
void query()
{
h=0;
do
{
cin >>q[h];
h++;
}
while(q[h-1]!='$' && h<=50);
l=h-1; //模串長度
}
void BM()
{
int c;
int flag1=0;
i=m-1;
do
{
j=m-1;k=i;
while(j>=0&&p[j]==t[k])
{
j=j-1;
k=k-1;
}
if(j==-1)
{
switch(a)
{
case 1:cout<<"匹配串在正文串中的位置:"<<i-m+2<<endl;
break;
case 2:if(l<=m)
{
for(c=0;c<l;c++) t[i-m+1+c]=q[c];
for(c=0;i+1+c<=n;c++) t[i-m+l+1+c]=t[i+c+1];
}
else
{
for(c=0;c<n-i;c++) t[n+l-m-c]=t[n-c];
for(c=0;c<l;c++) t[i-m+1+c]=q[c];
}
n=n+l-m;
break;
case 3:for(c=0;c<=n-i;c++) t[i-m+1+c]=t[i+1+c];
break;
}
i=i+1;
flag1=1;
}
else i=i+Pdist(t[i]); //求主串下一個匹配字符
}
while(i<=n);
if(flag1==0) cout<<"沒有匹配的字符串!"<<endl;
}
void save()
{
FILE *fp; /*定義文件指針*/
fp=fopen("d:\\banmin.txt", "w+"); /*建立一個文字文件只寫*/
fprintf(fp,"%s",t);
fclose(fp); /*關閉文件*/
}
void main()
{
Text();
do
{
cout<<"請選擇:\n\t1.查找\n\t2.替換\n\t3.刪除\n\t4.保存\n\t5.退出\n";
cin >>a;
switch(a)
{
case 1:cout<<"請輸入要查找的字符串,并以$結束:\n";
Pattern();
BM();
break;
case 2:cout<<"請輸入要替換的字符串,并以$結束:\n";
Pattern();
cout<<"請輸入替換字符串,并以$結束:\n";
query();
BM();
cout<<"編輯后的正文串為:\n"<<t<<endl;
break;
case 3:cout<<"請輸入要刪除的字符串,并以$結束:\n";
Pattern();
BM();
cout<<"編輯后的正文串為:\n"<<t<<endl;
break;
case 4:save();
break;
default:break;
}
}
while(a!=5);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -