JSMS14-字符串替换剑指Offer04

125 阅读1分钟

题目描述:将字符串"this is a string!"中的空格替换为@@

C代码:o(n)时间复杂度,就是通过遍历找到空格个数,创建新旧两个指针,分别指向老的尾元素和新的尾元素,如果老的尾元素不是空格则替换,如果是老指针-1,新指针所指向的位置加上@@

#include <stdio.h>

char *change(char *c,int len)
{
	int count=0;
	char *ret=c;
	for(int i=0;i<len;i++)
	{
		if(c[i]==' ')
		{
			count++;
		}
	}
	int newLen=len+count;
	c[newLen--]='\0';
	for(int j=len-1;j>=0;)
	{		
		if(c[j]==' ')
		{
			c[newLen--]='@';
			c[newLen--]='@';
			j--;
		}else
		{
			
			c[newLen--]=c[j--];
		}
	}		
	return ret;
}

int main(){
	char str[]="this is a string!";
	int len=sizeof(str)/sizeof(str[0]);
	char *ret= change(str,len);
	for(int i=0;ret[i]!='\0';i++)
	{
		printf("%c",ret[i]); 
	}
}