string_rep.cpp
来自「C++的电子教程」· C++ 代码 · 共 90 行
CPP
90 行
//字符串的替换
#include <stdio.h>
//求串长
int strlen(char *s) /* int Strlen(char s[]) */
{
int i;
for(i=0;s[i]!='\0';i++);
return i;
}
//串删除
void strdel(char *s,int i,int k)
{ int j;
if(i>=strlen(s)) return; // 位置i超界,不删除
if(i+k>=strlen(s)) // 将位置i设为串的结束
{ s[i]='\0';
return;
}
for(j=i+k;s[j]!='\0';j++) // 删除串的中间k个字符
s[j-k]=s[j];
s[j-k]='\0';
}
//串插入
void strins(char *s1,int i,char *s2)
{ int len1,len2,k;
len1=strlen(s1);
len2=strlen(s2);
// 将欲插入位置之后的所有字符往后移,以空出s2所需的字符串长度
for(k=len1;k>=i;k--)
s1[k+len2]=s1[k];
// 将s2的内容填入s1空出的位置上
for(k=0;k<len2;k++)
s1[i+k]=s2[k];
}
//模式匹配
int strindex(char *s,char *s1,int pos)
{ int n,m,i,j;
n=strlen(s);
m=strlen(s1);
for(i=pos-1;i<=n-m;i++)
{ for(j=0;s[i+j]==s1[j] && j<m;j++); //从各位置查找
if(j==m) return(i);
}
return -1;
}
//串替换
void strrep(char *s,char *s1,char *s2)
{ int len,len1,len2,idx,p;
len=strlen(s);
len1=strlen(s1);
len2=strlen(s2);
p=0;
do
{ idx=strindex(s,s1,p);
if(idx!=-1) //先判断匹配是否成功
{
strdel(s,idx,len1); //删除
strins(s,idx,s2); //插入要替换的串
p=idx+len2;
len=len+len2-len1;
}
else
break;
}while(p<=len-len1);
}
void main()
{
char s1[20];
char s2[20];
char s3[20];
printf("请输入字符串==>");
gets(s1); //读取字符串
printf("请输入被替换的字符串==>");
gets(s2); //读取字符串
printf("请输入替换的字符串==>");
gets(s3); //读取字符串
strrep(s1,s2,s3); //替换
printf("替换后的字符串是:%s\n",s1); //输出替换后的字符串
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?