乾坤大挪移,空间换效率-用数组下标法在字符串str的所有ch2字符后添加一个ch3字符

在《抛砖引玉-用数组下标法在字符串str的所有ch2字符后添加一个ch3字符》(https://blog.csdn.net/weixin_43917370/article/details/106239521)中,我们留下了一个问题:

该方法涉及到数组的插入,效率较低,能否改进?

本篇我们给出一种方案。

乾坤大挪移,空间换效率。

一、题目描述


请把下面的函数补充完整:

void func(char *str, char ch2, char ch3)

{//str存储某个字符串的首地址

//要求在str中每个ch2字符后面都添加一个ch3字符

}

二、原理介绍

1、设str串的长度为n,申请一块长度为2*n+的空间str2,作为临时空间

2、对于str中的每个字符srt[i]进行操作,先将其放入str2对其值进行判断,如果其是ch2,则把ch3也放入str2尾部

3、处理完毕,将编码为0的字符放入str2尾部

4、将str2串拷贝回str串

 

三、具体实现

 

#include 
#include 
#include
void func(char *str, char ch2, char ch3)
{
	int i,j,a;	
	//因为会往数组中插入ch3,长度会变化 
	char *str2;
	int n=strlen(str);
	str2=(char*)malloc(2*n+1);//临时空间
	if(str2==0) 
		exit(-1);//异常退出程序 
	  
	for(i=0,j=0;i


分析:

本方法采用了用空间换时间的策略,一次扫描字符串str就可以完成任务。

能量守恒在这个时候也是成立的。

你可能感兴趣的:(字符串,算法,c++,c语言)