主题:实现字符串置换操作
//****以下是实现字符串置换操作****************
#include <stdio.h>
#include <string.h>
#include<malloc.h>
int index(char *s, char *t,int pos, int sl,int tl);//从主串s的第pos个字符开始查找子串t,函数结果是子串t在主串s的pos开始之后首次出现的位置
void replace(char *s,char *t,char *v);//串的置换,将主串s中的t串,置换为v串
main()
{
char *s,*t,*v;
s=(char *)malloc(100);
t=(char *)malloc(100);
v=(char *)malloc(100);
printf("输入字符串s:");
gets(s);
printf("输入要在字符串s查找的子串t:");
gets(t);
printf("输入要置换的字符串v:");
gets(v);
replace(s,t,v); //调用串置换函数
printf("输出替换后的新字符串:%s\n",s);
}
void replace(char *s,char *t,char *v)//串的置换,将主串s中的t串,置换为v串
{
int i,j,k=1,po,sl,tl,p;
sl=strlen(s);
tl=strlen(t);
po=1;
k=index(s,t,po,sl,tl);
if(k==0)
return;
i=k-1;
if(strlen(v)==tl)//替换串的长度和子串的长度相等时
for(j=0;j<=tl-1;j++)
s[i++]=v[j];
if(strlen(v)!=tl)//替换串的长度和子串的长度不相等时,借助第三个数组t完成操作
{
for(j=0;j<k-1;j++)//先复制子串前的字符
t[j]=s[j];
for(p=0;p<strlen(v);p++)//再复制换的字符
t[j++]=v[p];
for(p=k+tl-1;p<sl;p++)//接着复制子串后的字符
t[j++]=s[p];
t[j]='\0';
sl=strlen(t);
for(i=0;i<sl;i++)//最后把数组t的值赋值给s
s[i]=t[i];
s[i]='\0';
}
}
int index(char *s, char *t,int pos,int sl,int tl)//从主串s的第pos个字符开始查找子串t,函数结果是子串t在主串s的pos开始之后首次出现的位置
{
int i,j;
i=pos;
j=1;
while(i<=sl && j<=tl)
if(s[i-1]==t[j-1])
{
i++;
j++;
}
else
{ i=i-j+2;
j=1;
}
if(j>tl)
return(i-tl);//返回位置
else
return(0);
}
//****以上是实现字符串置换操作****************
[em7][em7][em7][em7][em7][em7][em7][em7][em20][em20][em20][em20][em20][em20][em20]
#include <stdio.h>
#include <string.h>
#include<malloc.h>
int index(char *s, char *t,int pos, int sl,int tl);//从主串s的第pos个字符开始查找子串t,函数结果是子串t在主串s的pos开始之后首次出现的位置
void replace(char *s,char *t,char *v);//串的置换,将主串s中的t串,置换为v串
main()
{
char *s,*t,*v;
s=(char *)malloc(100);
t=(char *)malloc(100);
v=(char *)malloc(100);
printf("输入字符串s:");
gets(s);
printf("输入要在字符串s查找的子串t:");
gets(t);
printf("输入要置换的字符串v:");
gets(v);
replace(s,t,v); //调用串置换函数
printf("输出替换后的新字符串:%s\n",s);
}
void replace(char *s,char *t,char *v)//串的置换,将主串s中的t串,置换为v串
{
int i,j,k=1,po,sl,tl,p;
sl=strlen(s);
tl=strlen(t);
po=1;
k=index(s,t,po,sl,tl);
if(k==0)
return;
i=k-1;
if(strlen(v)==tl)//替换串的长度和子串的长度相等时
for(j=0;j<=tl-1;j++)
s[i++]=v[j];
if(strlen(v)!=tl)//替换串的长度和子串的长度不相等时,借助第三个数组t完成操作
{
for(j=0;j<k-1;j++)//先复制子串前的字符
t[j]=s[j];
for(p=0;p<strlen(v);p++)//再复制换的字符
t[j++]=v[p];
for(p=k+tl-1;p<sl;p++)//接着复制子串后的字符
t[j++]=s[p];
t[j]='\0';
sl=strlen(t);
for(i=0;i<sl;i++)//最后把数组t的值赋值给s
s[i]=t[i];
s[i]='\0';
}
}
int index(char *s, char *t,int pos,int sl,int tl)//从主串s的第pos个字符开始查找子串t,函数结果是子串t在主串s的pos开始之后首次出现的位置
{
int i,j;
i=pos;
j=1;
while(i<=sl && j<=tl)
if(s[i-1]==t[j-1])
{
i++;
j++;
}
else
{ i=i-j+2;
j=1;
}
if(j>tl)
return(i-tl);//返回位置
else
return(0);
}
//****以上是实现字符串置换操作****************
[em7][em7][em7][em7][em7][em7][em7][em7][em20][em20][em20][em20][em20][em20][em20]