基本思路:就是以出现的相同的字符串为界限,将字符分为:
相同字符串前的字符串+所要替换的字符串+相同字符串后的字符串
用strcat进行字符串间的连接,用strcmp判断字符串是否相同
代码实现:
#include <stdio.h>
#include <string.h>
void change(char arr[],int n)//将字符中大写的统一转化为小写的函数
{
for (int i = 0; i < n; i++)
{
if (arr[i] < 97)
{
arr[i] = arr[i] + 32;
}
}
}
int main()
{
void change(char arr[], int n);
char a[20]={'\0'};
char b[20]={'\0'};
char c[200]={'\0'};
char c1[20] = { '\0' };
char c_f[200] = { '\0' };//相同字符串前的字符串
char c_b[200] = { '\0' };//相同字符串后的字符串
//输入
gets(a);
gets(b);
gets(c);
int a_l = strlen(a);
int b_l = strlen(b);
int c_l = strlen(c);
int i, j, k,s,l,n,m;
for (i = 0; i < c_l; i++)
{
for (j = 0; j < a_l; j++)
{
if (c[i] == a[j]||c[i]==a[j]+32||c[i]==a[j]-32)//当c中有与a相同的字符,进入判断
{
for (k = i; k < i + a_l; k++)//将c中以与a相同长度的字符串取出,存入c1数组
{
c1[k - i] = c[k];
}
//调用函数,将两个字符转化为小写
change(c1, strlen(a));
change(a, strlen(a));
s = strcmp(c1, a);//比较两个字符串
if (s == 0)//如果两个字符串相同,进入替换
{
for (l = 0; l < i; l++)
{
c_f[l] = c[l];//相同字符串前的字符串存入c_f中
}
c_f[i] = '\0';\\别漏了结束符
strcat(c_f, b);//将b连接到c_f后
for (n = i + a_l ;n < strlen(c); n++)
{
c_b[n - i - a_l] = c[n];//相同字符串后的字符串存入c_b中
}
c_b[n-i-a_l] = '\0';\\别漏了结束符
strcat(c_f, c_b);
strcpy(c, c_f);//将替换好的字符串重新赋给c数组
//将c_f,c_b重置,才不会影响下一次循环
for (m = 0; m < strlen(c_f); m++)
{
c_f[m] = '\0';
}
for (int g = 0;g < strlen(c_b); g++)
{
c_b[g] = '\0';
}
}
}
}
}
printf("%s\n", c);
return 0;
}
好难,花了好久想的,有什么建议可在评论区中讨论一下。