替换字符串中的所有空格

要替换一个字符串中的所有空格,一种想法是开辟一个新的字符数组,然后对字符串进行遍历,若遇到普通字符,则将字符拷贝到新数组中,若遇到空格,则直接跳过或进行替换。这种方法需要使用额外的空间。

如果已知原字符串中有足够的空间容纳替换,且不允许使用额外的数组空间,则可以先遍历一遍字符串,统计空格总数,由此可以计算出替换后的字符串新长度,然后用一个指针指向新的字符串尾部,然后从尾部拷贝字符串,若遇到空格,则进行相应替换,如果两个指针相遇,则说明替换结束。

以下例子将空格替换为三个下划线:

#include <stdio.h>
#include <iostream>
#include <string.h>

using namespace std;

void replaceSpace(char str[])
{
    int len = strlen(str);
    int spaceCnt = 0;
    for(int i=0; i<len; i++)               //统计字符串中的空格数
    {
        if(str[i] == ' ')
            spaceCnt++;
    }
    char *pEnd = str+len;                  //计算原来的字符串尾部
    char *pNewEnd = str+len+spaceCnt*2+1;  //计算新的字符串尾部,包含'\0'
    *pNewEnd-- = '\0';
    while(pNewEnd > pEnd)                  //如果二者相遇,则说明已经完全替换完毕
    {
        if(*pEnd == ' ')
        {
            *pNewEnd-- = '_';
            *pNewEnd-- = '_';
            *pNewEnd-- = '_';
            *pEnd--;
        }
        else
        {
            *pNewEnd-- = *pEnd--;
        }
    }
}

/*不允许开辟新的存储空间,假设原空间足够大*/
/*要求0(n)时间复杂度*/
int main()
{
    char str[256] = " helloworld  nihao my name is jakiechen ";
    replaceSpace(str);
    cout<<str<<endl;

    getchar();
    return 0;
}


你可能感兴趣的:(替换字符串中的所有空格)