替换空格

实现一个函数,把字符串中的每个空格替换成“%20”,例如:“we are happy." 则输出“we%20are%20happy"。

这里首先需要明确是在原字符串上做替换还是创建新的字符串上做替换,这里有2种不同的解决方案。

一下是在原字符串上做修改(当然前提是字符串后的剩余空间足够):

第一种解放是大家比较容易想到的从头到尾遍历字符串遇到空格就替换,把剩下的字符往后移。但这种方法效率不行。

第二种方法是首先遍历一遍字符串,得到空格的总数,和替换后字符串的总长度,然后从变换后字符串尾部开始复制和替换。这种方法所有字符串只要移动一次。

下面是代码:

//传入字符串和字符串的总容量,注意是容量
void ReplaceBlank(char* str,int length)
{
    if( str == NULL || length <=0 )
        return;

    int originalLength = 0; //原始字符串长度
    int numberOfBlank = 0;//空格总数
    for(int i =0; str[i] !='\0'; ++i)
    {
        if(str[i] == ' ')
        {
            ++numberOfBlank;
        }
        ++originalLength;
    }

    int newLength = originalLength + numberOfBlank*2; // 替换后的字符串长度;
    //如果容量不足则退出
    if(newLength > length)
        return;

    int indexOfOriginal = originalLength;//索引,指向原字符串尾部
    int indexOfNew = newLength;//索引,指向新字符串尾部
    while(indexOfOriginal >=0 && indexOfNew > indexOfOriginal)
    {
        if(str[indexOfOriginal] != ' ')//其他字符,简单的赋值向前移动
        {
            str[indexOfNew] = str[indexOfOriginal];
            --indexOfNew;
        }
        else //  指向空格
        {
            str[indexOfNew --] = '0';
            str[indexOfNew --] = '2';
            str[indexOfNew --] = '%';
        }

        --indexOfOriginal;
    }

}

 

posted @ 2013-03-01 15:58  没离开过  阅读(144)  评论(0)    收藏  举报