题目
将s所指字符串中最后一次出现的与t1所指字符串相同的子串替换为t2所指字符串。
分析:
1.s是源字符串
2.t1为指定字符串,需要在s中找一致的字符串,要找到最后一次完全匹配的字符串
3.t2是所要替换的字符串
代码如下:
/*
将s所指字符串中最后一次出现的与t1所指字符串相同的子串替换为t2所指字符串。
*/
#include <stdio.h>
#include <string.h>
void fun(char *s,char *t1,char *t2)
{
int len1;
int len2;
int len3;
int i,j; // 循环变量
int t=0;
int k=0;
int w;
int x=0;
int c[10]={0};
char temp[100];
len1=strlen(s);
len2=strlen(t1);
len3=strlen(t2);
/* 找出与字符串t1相同的字符串,并记录好位置 */
for(i=0;i<len1;i++)
{
for(j=0;j<len2;j++)
{
if(s[i+j] == t1[j])
{
t++;
}
}
if(t==len2) // 如果t的值和len2相等,则说明字符串匹配成功
{
c[k]=i;
if(0==i) // 如果是第一个就出现相同字符串,将其存-1
{
c[k]=-1; // 便于检查相同字符串是否只是第一个
}
k++;
}
t=0; // 清零,继续进行下一次匹配
}
for(k=9;k>=0;k--) // 找出最后一次出现的 所要查找的字符串位置
{
if(c[k]!=0)
{
w=c[k];
if(-1 == c[k])
{
w=0; // 说明第一个就是相同字符串,需要替换,下标要变成0
}
break;
}
}
/* t1所指字符串相同的子串替换为t2所指字符串 */
for(i=0;i<100;i++)
{
if(i==w)
{
for(j=0;j<len3;j++)
{
temp[x]=t2[j];
x++;
}
i=i+len2;
}
temp[x]=s[i];
x++;
}
strcpy(s,temp);
}
void main()
{
char s[100];
char t1[20];
char t2[20];
puts("请输入源字符串:");
gets(s);
puts("请输入所要查找的字符串:");
gets(t1);
puts("请输入所要替换的字符串:");
gets(t2);
fun(s,t1,t2);
puts(s); // 输出字符串
}
结果为:
与大家分享,有问题可以一起交流。