编写一个实现串的置换 *** 作Replace(&S,T,V)

编写一个实现串的置换 *** 作Replace(&S,T,V),第1张

编写一个实现串的置换 *** 作Replace(&S,T,V)

串的置换 *** 作 用串v置换出 串s中与t相同的所有非空串 


#include 
//获取串长度 
int get_stringSize(char *p);
//打印 
void print_string(char *p);
// 串的置换 *** 作 用串v置换出 串s中与t相同的所有非空串 
void replace(char s[],char t[],char v[])
{
	int len_v = get_stringSize(v);
	int len_t = get_stringSize(t);
	int len_s = get_stringSize(s);
	
	if(len_s < len_t || len_v == 0 || len_t == 0 || len_s == 0)//串不能为空,且子串 不能比主串长 
	{
		printf("替换失败,串不符合规定!!!n");
		return;
	}
	
	int i = 0,j = 0;
	for(i = 0;s[i] != '';i ++)
	{
		for(j = 0;t[j] != '';j ++)
		{
			if(s[i + j] == t[j])
			{
				continue;
			}
			break;
		}
		
		//比对找到了一个 
		if(t[j] == '')
		{
			//如果要替换的串t 长度大于 替换串v 
			if(len_t >= len_v)
			{
				//先替换 再腾位置 
				//替换 
				for(int k = 0;k < len_v;k ++)
				{
					s[i + k] = v[k];
				}
				//因为 替换后仍有 无效数据,后面数据向前靠拢
				int sub = len_t - len_v;//向前靠拢空间为 sub
				for(int k = i + len_v;k < len_s;k ++)
				{
					s[k] = s[k + sub];
				}//最后sub位 元素 会被自己赋值为空,省了赋空操作 
			}
			else//len_t < len_v要替换的串t 长度小于 替换串v
			{
				//先腾位置 再替换
				//向后 腾位置 
				int sub = len_v - len_t;
				for(int k = len_s - 1;k >= i + len_t;k --)
				{
					s[k + sub] = s[k];
				}
				//位置腾出,开始替换
				for(int k = 0;k < len_v;k ++)
				{
					s[i + k] = v[k];
				}
			}
			
			//原s 串 的长度 发生了 变化,更新s串长度 
			len_s = get_stringSize(s);
		}
		else;//没有找到 break结束 
	}
	return;
}

int main()
{
	char s[50] = {'a','b','c','d','a','b','c','a','b'};//初始化一个串,需要修改定义成字符数组 
	char *t = "bcd";//只需要查找,不修改定义成字符串指针 
	char *v = "BCD";//只需要查找,不修改定义成字符串指针 
	//串的转置 
	replace(s,t,v);
	print_string(s);
	return 0;
}

//获取串长度 
int get_stringSize(char *p)
{
	int i = 0;
	while(*(p + i) != ''){i ++;}
	return i;
}

void print_string(char *p)
{
	for(int i = 0;*(p + i) != '';i ++)
	{
		printf("%c ",*(p + i));
	}
	printf("n");
	return;
}

 

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5634947.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存