给你一个字符串,把连续出现的相同字符串变成只出现一次

题目:给你一个字符串,把连续出现的相同字符串变成只出现一次。比如:aaabbccc经处理后变为abc

解析思路:直观解法,对于字符串s,我们可以申请长度为strlen(s)+1的字符数组空间。然后遍历一遍s,若字符发生变化着放入新申请的字符数组内。下面考虑不申请空间 的作法。我们可以直接在s上进行修改。之所以能够进行这样的修改,是因为我们修改的s肯定是已经访问过了的。现有指针p1,p2初始时都指向字符串头。此时将*p1赋值给*s,s后移一位,然后p2往后面遍历。若*p1和*p2相同,这p2往后移。若不同则,指针p2赋值给p1,p2后移,同时将*p1放入到s所指内存。基于这样的思路,编写代码如下:


/*
	author:song0071000#126.com
	time:20140417
	function:compress string
*/
char* change(char* s)
{
	if(s==NULL)
		return NULL;
	char* p1=s;
	char* p2=s;
	char temp =*s;
	char* addr = s;
	*s++ = *p1;
	while(*p2!='\0')
	{
		if(*p1 == *p2)
			p2++;
		else
		{
			p1=p2;
			p2++;
			*s++ = *p1;
		}	
	}
	*s = *p2;
	return addr;
}

如有其它更好方法,欢迎讨论!

本人享有博客文章的版权,转载请标明出处http://blog.csdn.net/baidu20008


你可能感兴趣的