在O(n)的时间内实现替换字符串中的一个空格为三个空格

    先计算出源串的长度与空格数,然后计算替换所需长度,从末尾开始进行拷贝和替换即可。

/*************************************************************************
    > File Name: space.c
    > Author: Qiang
    > Mail: [email protected] 
    > Created Time: 2014年04月29日 星期二 14时27分55秒
 ************************************************************************/

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 512//源串最大长度

void space(char* str, int length)
{
	if(str == NULL || length < 0)
		return;
	char *pTemp = str;
	int i;
	int originalLength = 0, spaceNum = 0;
	while(*pTemp != '\0')
	{
		originalLength ++;//记录源串长度
		if(*pTemp == ' ')
			spaceNum++;//记录空格数
		pTemp++;
	}
	char *pOriginal = pTemp;//记录源串末尾位置
	if(length < originalLength + 2 * spaceNum)//判断源串长度是否足够
		return;
	else
		pTemp = str +  originalLength + 2 * spaceNum;
	
	while(pTemp >= pOriginal)//拷贝与替换
	{
		if(*pOriginal == ' ')
		{
			*(pTemp--) = ' ';
			*(pTemp--) = ' ';
			*(pTemp--) = ' ';
		}
		else
		{
			*(pTemp--) = *pOriginal;
		}
		pOriginal--;
	}
}

int main(void)
{
	char str[MAXSIZE];
	gets(str);
	space(str, MAXSIZE);
	puts(str);
	return 0;

}


你可能感兴趣的:(在O(n)的时间内实现替换字符串中的一个空格为三个空格)