替换空格

来源:互联网 发布:linux yum 安装mysql 编辑:程序博客网 时间:2024/06/02 02:50

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
(在网络编程中,如果URL参数中含有特殊字符,如空格、‘#’等,可能导致服务器端无法获得正确的参数值。我们需要将这些特殊符号转换成服务器可以识别的字符。转换的规则是在‘%’后面跟上ASCII码的两位十六进制的表示。)
直观做法:

void replaceSpace(char *str,int length) {int i,j;for(i=0;i<length;){if(str[i]==' '){for(j=length-1;j>i;j--){str[j+2]=str[j];}str[i]='%';str[i+1]='2';str[i+2]='0';i+=2;length+=2;}else {i++;}}}

从前往后替换,期间注意由于是用三个字符替换一个字符,空格后面的字符处理不当会被覆盖。此方法的时间复杂度为O(n2)。
采用从后往前的思路,每个字符都只复制一次,使得算法的时间效率为O(n):

void replaceSpace(char *str,int length) {int origeLength=0;int BlankLength=0;int i=0;while(str[i]!='\0'){origeLength++;if(str[i]==' ')BlankLength++;i++;}int indexa=origeLength;int indexb=origeLength+BlankLength*2;while(origeLength>=0 && indexb>indexa){if(str[indexa]==' '){str[indexb--]='0';str[indexb--]='2';str[indexb--]='%';}else{str[indexb--]=str[indexa];}--indexa;}}
原创粉丝点击