一个字符串插入到另一个字符串,不使用辅助空间

        今天来写一个字符串问题的算法,也是巩固下知识,挺有趣的一个方法。也算是一种思想!

        这个问题就是让一个字符串指定位置插入在另一个字符串中

        办法就是先让被插入字符串指定位置后的字符串插入到插入字符串中,然后再让插入字符字符串全部插入被插入字符串指定位置后

        eq: 字符串"abcdef"插入在字符串"ghijkl"第三个位置后

                   step1:字符串"ghijkl"第三个位置后的字符,插入到字符串"abcdef"

                                resultant1:"abcdefjkl"

                   step2 : 字符串"abcdefjkl"插入到字符串"ghijkl"第三个位置后

                                resultant2:"ghiabcdefjkl"

        这样就可以啦!这个方法很妙,全程在运用指针。

       方法: 先给出代码再用图来解释代码


int main()
{
	char s[30] = "study";
	char t[30] = "i like ";
	insert(s, t, 0);
	puts(s);
	
}

void insert(char* ps, char* pt, int pos)
{//t插入在s的pos位置
	char* p = pos + ps;		//p指向插入位置
	char* q = pt;			//q指向t
	while (*q != '\0')		//q指向t的‘\0’
	{
		q++;
	}
	while (*p != '\0')		
	{
	   *(q++) = *(p++);	//s插入位置后的值赋值给t‘\0’的值
	}
	p = pos + ps;			//p重新指向插入位置
	while (*pt != '\0')		
	{
		*(p++) = *(pt++);	//t的值赋值给s插入位置后
	}
}

        初始状态:

         因为pos为0,所以p指针和ps指针指的地方一样,因为q指针就是指向pt指针指向的位置,所以图为:

        然后就是q指针在动,就是不等于'\0'时就往'\0'那边走,直到最后等于'\0'就停止了 

          *(q++) = *(p++)这句语句可以写成:*(q) = *(p);

                                                                   p++; q++;

         *号为解引用操作,可以理解为p,q为地址,*q则为值,所以*(q) = *(p)其实就是赋值操作,while和上一条是一样的意思,所以结果为:

         p = pos + ps;这条语句就是说,让p回到插入位置,给我滚回来!结果就是:

        然后最后一步就是把t里的字符串全部插入到s的插入位置上啦。 

        插是插在插入位置,所以让p回去的好处就是这个,一般情况下,我们是不动首地址的指针的,都是复制一份过来,这和单链表的原理一样,大家有兴趣可以去学学,插入后结果就如下图!

         指针比较灵活也容易用错,比如动态分配的问题,时常会发生让你意想不到的问题,会大量的浪费你的时间,计算机这东西你会了你可能就会了,你不会,那真就是猜不出来了,还是需要大量的知识储备再加上无数次的实操,加油吧!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值