字符串中的空格替换
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;
以上是关于字符串中的空格替换的主要内容,如果未能解决你的问题,请参考以下文章