Problem19:字符串的子串替换

问题描述:任意给定3个字符串str1、str2和str3,请将str1中所有的str2替换成str3,
且在替换的结果字符串中不能再有str2存在,如果一次替换后strl中还有str2存在,那么
继续替换str2,直到strl中不存在str2为止。在替换时,优先替换str1中首次出现的str2
(例如str1为 ababab,str2为aba,那么首先替换最初出现的aba,即str1的前3个字符)。
strl、str2、str3这3个字符串中可以包含任意的字符,注意str1中不一定包含str2,str3中
定不包含str2(如st2为aa,str3为ab,这种情况是不存在的)。
输入与输出要求:输人3个长度均不超过100的非空字符串,分别为题目中所述的
str1、str2和str3。输出经过替换处理后得到的新strl,占一行。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
/*不想做高数,还是代码好玩*/

int check(char st1[],char st2[]);
void replace(char st1[], char st2[], char st3[]);
int checkLoc(char st1[], char st2[]);

int main()
{
	char st1[110], st2[110], st3[110];
	gets(st1);
	gets(st2);
	gets(st3);
	while (check(st1, st2) == 1)//当st1中还有st2时
	{
		replace(st1, st2, st3);
	}
	puts(st1);
	return 0;
}

int check(char st1[], char st2[])//检查st1中是否含有st2
{
	int i, j;
	for (i = 0; st1[i]; i++)
	{
		if (st2[0] == st1[i])
		{
			int k = i;
			for (j = 0; st2[j] == st1[k]; j++, k++)
			{
				if (st2[j + 1] == '\0')
					return 1;
			}
		}
	}
	return 0;
}

void replace(char st1[], char st2[], char st3[])//替换操作
{
	int i, j=0;
	for (i = checkLoc(st1,st2); st1[i]&&st2[j]; i++)
	{
		st1[i] = st3[j++];
	}
}

int checkLoc(char st1[], char st2[])//检查替换开始的位置
{
	int i, j;
	for (i = 0; st1[i]; i++)
	{
		if (st2[0] == st1[i])
		{
			int k = i;
			for (j = 0; st2[j] == st1[k]; j++, k++)
			{
				if (st2[j + 1] == '\0')
					return i;
			}
		}
	}
	return 0;
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值