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 + -
显示快捷键?