您的位置:首页 > 其它

替换空格

2016-05-06 21:19 330 查看
题目:实现一个函数将字符串中每个空格替换成“*♥*”。例如:输入“Hello kkw accompany you long”,输出:“Hello*♥*kkw*♥*accompany*♥*you*♥*long”。

思路:先遍历一次字符串,统计出字符串的原始长度和空格个数,并由此可以计算出替换之后字符串的总长度。每替换一个空格,长度增加2,因此替换以后字符串的长度等于原来的字符串长度加上2*空格数目。

然后从后向前拷贝字符串,遇到一个字符串就替换。

时间复杂度为O(n)

#include<iostream>
using namespace std;
#pragma warning (disable :4996)

void ReplaceBlank(char *str, int len)
{
if (str == NULL || len <= 0)
return;
char *begin = str;
int OriginaLen = 0;
int BlankNum = 0;
//求字符串原始长度和空格数
while (*begin != '\0')
{
OriginaLen++;
if (*begin == ' ')
BlankNum++;
begin++;
}

int Newlen = OriginaLen + (BlankNum * 2);
if (Newlen > len)
return;
int IndexOfOrigina = OriginaLen - 1;
int IndexOfNew = Newlen - 1;
while (IndexOfOrigina >= 0 && IndexOfNew > IndexOfOrigina)
{
if (str[IndexOfOrigina] == ' ')
{
str[IndexOfNew--] = '*';
str[IndexOfNew--] = 3;//心形的ASCII码是3
str[IndexOfNew--] = '*';
IndexOfOrigina--;
}
else
{
str[IndexOfNew--] = str[IndexOfOrigina--];
}
}
cout << str << endl;
}

int main()
{
char str[1024];
memset(str, '\0', sizeof(str));
strcpy(str, "Hello kkw accompany you long");
cout << str << endl;
ReplaceBlank(str, 1024);
getchar();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: