实现一个函数把每个空格替换成20%

实现一个函数,把字符串中的每个空格替换成“20%”,例如输入“We are happy”,则输出“We20%are20%happy”

关于思路:

首先20%中一共有三个字符,而空格只占一个空格,所以每替换一个空格,字符串的长度就会比之前多两个,所以我们可以根据这个计算出替换后的字符串的长度,另外我们还应判断替换后的长度是否在容量范围之内。

关于代码:

#define MAXSIZE  200
char* replaceBlank(char* a, int max)
{
int count = 0;
int blank = 0;
char *p = a;  //在这里把传过来的字符串保存一下,如果一直用a后面会出错

        int i = 0;
if (a == NULL || max < 0)
return  NULL;
while (*a != '\0')
{
count++;  //计算出未替换前的字符串长度
if (*a == ' ')
{
blank++; //计算空格的个数
}
a++;
}
int newlength = count + blank * 2;  //计算替换后新字符串的长度
if (newlength > max)
return  NULL;
int NEWlength = newlength;
int OLDlength = count;
while (OLDlength >= 0 && NEWlength > OLDlength) //从后往前拷贝
{
if (p[OLDlength]== ' ')
{
p[NEWlength--] = '0';
p[NEWlength--] = '2';
p[NEWlength--] = '%';
}
else
{
p[NEWlength--] = p[OLDlength];
}
--OLDlength;
}
cout << p << endl;
}
int main()
{
char  arr[MAXSIZE] = "hello world HI ";
replaceBlank(arr, MAXSIZE);
system("pause");
return 0;
}

关于结果:


关于总结:

在写这个函数的时候,我最开始并没有保存a,而是一直用a进行的操作,再求字符串长度及空格多少的时候一切顺利,在拷贝的时候就出问题了,在while()循环里,字符串一直在减减并未赋值,打开调试窗口发现两个字符串一直都是‘\0’,最后直接退出。检查了几遍才发现因为我之前求字符串长度的时候,已经让a走到了斜杠0,所以在后续操作的的时候就出问题了。所以这里应该先把a保存一下。另外如果把代码不用指针全用数组,也能避免这个问题。也就是说把之前求字符串长度的代码改成如下形式。

while(a[i]!='\0')

{

  ++OLDlength;

if(a[i]==' ')

++count;

++i;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值