替换空格

来源:互联网 发布:sqlserver删除表数据 编辑:程序博客网 时间:2024/06/05 06:28

/*
面试例题4:替换空格 //已上传
请实现一个函数,把字符串中的每个空格替换成“%20”。
例如输入“We are happy”,则输出”We%20are%20happy”。
转换的规则是在‘%’后面跟上ASCII码的两位十六进制的表示,比如空格的ASCII码是32,即16进制的0x20,因此空格被替换成“%20”,
再比如‘#’的ASCII码为35,即十六进制的0x23,被替换成“%23”。
方法一:从前往后替换, 假设字符串的长度为n,对每个空格字符,需要移动后面O(n)个字符,因此对含有O(n)个空格字符的字符串而言总的时间效率是O(n^2);
方法二:从后往前替换,时间复杂度为O(n)。
*/

#if 1#include<stdio.h>#include<iostream>using namespace std;void ReplaceBlank(char string[],int length)    //方法2 {    if(string == NULL ||length <= 0)        return ;    int oldLength = 0;    int numberOfBlack = 0;    int i = 0;    while(string[i] != '\0')    {        ++oldLength;  //统计原字符串的个数        if(string[i] == ' ')            ++numberOfBlack;   // 统计空格的个数        ++i;    }    int newLength = oldLength +numberOfBlack*2;  //newLength 为把空格替换成'%20'之后的长度    if(newLength <length)        return ;    int indexOfOriginal = oldLength;    int indexOfNew = newLength;    while(indexOfOriginal >= 0 &&indexOfNew >indexOfOriginal)    {        if(string[indexOfOriginal] == ' ')  //替换空格        {            string[indexOfNew--] = '0';            string[indexOfNew--] = '2';            string[indexOfNew--] = '%';        }        else        {            string[indexOfNew --] = string[indexOfOriginal]; //如果不是空格 原样输出字符        }        --indexOfOriginal;    }   }int main(){    char string[100] = "We are family.";        printf("原字符串为:\n");    cout<<string<<endl;    int len = strlen(string);    ReplaceBlank(string,len);    printf("替换后的字符串为:\n");    cout<<string<<endl;      return 0;}#endif
原创粉丝点击