在网络编程中,如果URL参数中含有特殊字符,如空格、“#”等,可能导致服务器端无法获得正确的参数值,需要将这些特殊符号转换成服务器可以识别的字符。转换的规则是在“%”后面跟上ASCⅡ码的两位十六进制的表示。比如空格的ASCⅡ码是32,即十六进制的0×20,

admin2017-04-28  27

问题 在网络编程中,如果URL参数中含有特殊字符,如空格、“#”等,可能导致服务器端无法获得正确的参数值,需要将这些特殊符号转换成服务器可以识别的字符。转换的规则是在“%”后面跟上ASCⅡ码的两位十六进制的表示。比如空格的ASCⅡ码是32,即十六进制的0×20,因此空格被替换为“%20”。再比如“#”的ASCⅡ码为35,即十六进制的0×23,它在URL中被替换为“%23”。请设计一个时间和空间上尽可能高效的算法,把字符串中的每个空格替换为“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.”。要求:
根据设计思想,采用C、C++或Java语言描述算法,关键之处给出注释。

选项

答案算法实现如下: /*length为字符数组string的总容量+/ void ReplaceBlank (char string[],int length) { if (string==NULL&&length<=0) return; /*originalLength为字符串strincg的实际长度*/ int originalLength=0; /*numberOfBlank为字符串中空格的数量*/ int numberOfBlank=0; int i=0; while (string[i] !=’\0’) { originalLength++; if (string [iJ;=’ ’) numberOfBlank++; i++; } /*newLength为把空格替换成’%20’之后的长度*/ int newLength=originalLength+numberOfBlank*2; int indexOfOriginal=originalLength; int indexOfNew=newLength; while (indexOfOriginal>=0&&indexOfNew>indexOfOriginal) { //如果当前字符为空格,在indexOfNew所指单元以及前2格分别插入字符’0’、 ’2’、’%’ if( string[indexOfOriginalJ==’ ’) { string[indexOfNew--]=’0’; string[indexOfNew--]=’2’; string [indexOfNew--]=’%’; } //如果当前indexOfOriginal所指的字符不是空格,将当前字符复制到indexOfNew所指位 置,并将indexOfNew向前移动1格 else { string[indexOfNew--] =string [indexOfOriginal]; } indexOfOriginal--; } }

解析
转载请注明原文地址:https://kaotiyun.com/show/DWRi777K
0

最新回复(0)