替换字符串中的空格

问题描述:

请实现一个函数,把字符串中的每个空格替换为“%20”。例如输入“Hello ZCM”,则输出“Hello%20ZCM”。

 

思路分析:在网络编程中,如果URL参数中有特殊字符,如空格、’#’等,可能导致服务端无法获得正确的参数值。

我们需要将这些特殊符号转换成服务器可以是别的字符。转换规则是在’%‘后面跟上ASII码的两位十六进制表示。

此题只需转换空格。为了提高效率,我们可以县便利一次字符串,这样就能统计出字符串的空格总数和长度。我们假定

存放字符串的数组足够长以便不需要辅助的存储空间。

1使用两个指针。把第一个指向原字符串的末尾,第二个指向新字符串的末尾(’\0‘)处。

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] != '\0')
    {
        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--;
    }
}

思考:作为代码边界的开始和结尾的一定要考虑清楚,不然很容易出错。

posted @ 2014-11-24 16:29  阿木木在发呆  阅读(1206)  评论(0编辑  收藏  举报