C++笔试题(剑指offer 面试题4 替换字符串中的空格)

来源:互联网 发布:eureka api java 编辑:程序博客网 时间:2024/06/07 21:02
#ifndef F_FIND_WORK_TEST4_REPLACE_BLANK_20171106_JHASKDFJHASF_H_#define F_FIND_WORK_TEST4_REPLACE_BLANK_20171106_JHASKDFJHASF_H_#include <stdio.h>/*剑指offer 面试题替换字符串中的空格将字符串出现的所有空格,替换为%201) 由于空格和%20所占用的字节不同,所以替换之后字符串长度变长2) 由于长度不同,导致每一次替换时,空格之后的字符都要做一次移动,导致消耗时间大因此: 采用双指针,重新申请内存,从末尾开始复制*/BOOL RepalceBlank(char szTest[], int nLen);//测试void F_Test4_ReplaceBlank(){    char szTest[] = "Hello Word, Welcome to my country, China!";    RepalceBlank(szTest, strlen(szTest) + 80);}BOOL RepalceBlank(char szTest[], int nLen){    if((nLen < 0) || (szTest == NULL))    {        return FALSE;    }    //计算长度 和 空格个数    int nOldLen(0);    int nBlankNums(0);    while (szTest[nOldLen] != '\0')    {        if (szTest[nOldLen] == ' ')        {            nBlankNums++;        }        nOldLen++;    }    //每一个 %20 比' '多两个字符    int nNewLen = nOldLen + nBlankNums*2;    if(nNewLen > nLen)    {        return FALSE;//没有足够的空间存储替换后的字符串    }    //从尾部开始复制元素    while(nNewLen >= 0)    {        if (szTest[nOldLen] == ' ')        {            szTest[nNewLen--] = '0';            szTest[nNewLen--] = '2';            szTest[nNewLen--] = '%';        }        else        {            szTest[nNewLen--] = szTest[nOldLen];        }        nOldLen--;    }    return TRUE;}#endif//F_FIND_WORK_TEST4_REPLACE_BLANK_20171106_JHASKDFJHASF_H_