问题描述:
请实现一个函数,把字符串中的每个空格替换为“%20”。例如输入“Hello ZCM”,则输出“Hello%20ZCM”。
思路分析:在网络编程中,如果URL参数中有特殊字符,如空格、’#’等,可能导致服务端无法获得正确的参数值。
我们需要将这些特殊符号转换成服务器可以是别的字符。转换规则是在’%‘后面跟上ASII码的两位十六进制表示。
此题只需转换空格。为了提高效率,我们可以县便利一次字符串,这样就能统计出字符串的空格总数和长度。我们假定
存放字符串的数组足够长以便不需要辅助的存储空间。
1使用两个指针。把第一个指向原字符串的末尾,第二个指向新字符串的末尾(’ ‘)处。
2以此复制字符串的内容,知道第一个指针碰到第一个空格
3把第一个空格替换为’%20‘,第一个指针向前移动一格,第二个指针向前移动三格
4以此复制字符串中的字符,直至碰到空格
5不断进行下去直到原字符串头部达到后
参考源码:
void ReplaceBlank(char string[],int length)//length为string的总容量
{
if (string == NULL || length <= 0)
{
return;
}
int nOriginalLenth = 0;
int nNumberofBlank = 0;
//获得字符串的长度和空格的个数
while(string[nOriginalLenth] != ' ')
{
if (string[nOriginalLenth] == ' ')
{
nNumberofBlank++;
}
nOriginalLenth++;
}
//nOriginalLenth--;
int nNewLength = nOriginalLenth + nNumberofBlank*2;
if (nNewLength > length)
{
return;
}
int nIndexofOriginal = nOriginalLenth;
int nNewIndex = nNewLength;
while (nIndexofOriginal >= 0)//目前还没想通有何限制
{
if (string[nIndexofOriginal] == ' ')
{
string[nNewIndex--] = '0';
string[nNewIndex--] = '2';
string[nNewIndex--] = '%';
}
else
{
string[nNewIndex--] = string[nIndexofOriginal];
}
nIndexofOriginal--;
}
}
思考:作为代码边界的开始和结尾的一定要考虑清楚,不然很容易出错。