#ifndef F_FIND_WORK_TEST4_REPLACE_BLANK_20171106_JHASKDFJHASF_H_
#define F_FIND_WORK_TEST4_REPLACE_BLANK_20171106_JHASKDFJHASF_H_
#include <stdio.h>
/*
剑指offer 面试题
替换字符串中的空格
将字符串出现的所有空格,替换为%20
1) 由于空格和%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_
C++笔试题(剑指offer 面试题4 替换字符串中的空格)
最新推荐文章于 2023-01-06 09:17:18 发布