字符串中的空格替换

Posted xulu_258

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串中的空格替换相关的知识,希望对你有一定的参考价值。

实现一个函数,将字符串中的每个空格替换成“%20”,例如输入i am happy,输出i%20am%20happy。

  首先我们想到的是原来一个空格符,替换成三个字符‘%’、‘2’、‘0’.

  解法一:最直观的做法就是从头到尾扫描字符串,每碰到一个空格,就必须先把空格后面的字符后移两个字节,否则后面的两个字节就被覆盖了,假设字符串的长度为n,对于一个空格字符,需要向后移动0(n)个字符,因此对于o(n)个空格字符,需要o(n2)的时间效率,因此为了减少移动次数,我们就想到把从前向后移动改成从后向前移动,

解法二:通过遍历一次字符串,统计出字符串的实际长度以及空格的数量,然后通过原长度加上空格数乘2就得到替换后的字符串总长度,然后转被两个指针,P1指向原字符串的末尾,P2指向替换后的字符串的末尾,接下来向前移动p1,并依次把他所指向的字符复制到P2指向的位置,直到碰到空格,就把p1向前移动一个1格,P2前面依次插入%20,然后继续重复向前,若p1和p2指向同一个位置,则表示所有空格已经替换完毕。这种解法的时间复杂度为o(n),因为只移动了一次。具体代码如下:

//把字符串里面的空格用%20代替
#include<stdio.h>
#include<string.h>
void replaceblank(char s[],int length)

  int originallength=0;
  int numofblank=0;
  int i=0;
  int newlength,indexoforiginal,indexofnew;

  if(s == NULL || length <= 0)
  
    return;
  

  //计算字符串的长度以及空格数,便于求出替换后的长度
 
  while(s[i]!='\\0')
  
     ++originallength;
	 if(s[i]==' ')
	 
	   ++numofblank;
	 
	 ++i;
  

  newlength=originallength + 2 * numofblank;
  if(newlength>length)
	  return;
  //相当于两个指针,分别指向原字符串的末尾和新字符串的末尾
  indexoforiginal=originallength;
  indexofnew = newlength;
  while(indexoforiginal >=0 && indexofnew > indexoforiginal)
  
     if(s[indexoforiginal]==' ')
	 
	   s[indexofnew--]='0';
	   s[indexofnew--]='2';
	   s[indexofnew--]='%';
	 
	 else
	 
	    s[indexofnew--]=s[indexoforiginal];
	 
	 --indexoforiginal;
  
  


int main()

  //char s[20]="I am happy";   
  char s[20];
  //可以输入带有空格的字符串
  gets(s);
  //scanf("%s",s); 不能输入带有空格
  replaceblank(s,20);
  printf("%s\\n",s);
  return 0;




























以上是关于字符串中的空格替换的主要内容,如果未能解决你的问题,请参考以下文章

请实现一个函数,把字符串中的每个空格替换成“20%”。

替换空格

替换空格

剑指offer05-替换空格

剑指offer05-替换空格

字符串中的空格替换