前言
❤️ 铁汁们大家好,欢迎大家来到出小月的博客里,今天小月呢写了一道题目叫替换空格,但是呢,写完之后调试了半天不知道哪里错了,经过小月的坚持不懈,终于成功,来分享给大家小月的错误,希望大家看完我这篇文章都能够“涨芝士”,感觉小月写的还不错的话,记得👍🏻点赞加关注😘鼓励一下博主哦,不然下次可找不到我啦❗❗
作者简介
❤️ 作者的主页:出小月的《程序员历险记》
❤️专栏:《C语言》,《数据结构初阶》
😊希望大家都能够:好好学习,天天编程❗❗❗
一、题目介绍
🐻
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = “We are happy.”
输出:“We%20are%20happy.”
二、题目链接
替换空格力扣链接
三、小月的思路
首先,查这个字符串有多少个字符,并且有多少个空格字符,用来算出需要开辟的空间多大,然后开辟一个新的数组用来放替换空格之后的字符串,之后从后往前遍历就可以了。
四、小月出现的错误
小月呢,比较大意在数数组的时候就犯了两个大错误,导致花费了大量的时间,下面是小月之前写的错误的代码
int count = 0;
int spacecount = 0;
while (*s != '\0')
{
s++;
count++;
if (*s == ' ')
spacecount++;
}
错误1
如果s这个指针指向的字符串只有一个空格呢?比如这样“ ”,进入while循环中,s++指向‘\0’,count=1,然后此时*s是‘\0’,这个空格就没有统计上。就导致后面新开辟的数组长度不够,就错了。需要把判断是否为空放到前面
错误2
看这两张图片p不断++,p[0]就不断改变,到下面p[oldi]或者p[newi]就越界访问了,因此需要一个指针指向它,改变指针,而不改变本事文章来源:https://www.toymoban.com/news/detail-425798.html
五、正确代码
char* replaceSpace(char* s) {
int count = 0;
int spacecount = 0;
char*p=s;
while (*p != '\0')
{
if (*p == ' ')
spacecount++;
p++;
count++;
}
int newlength = count + spacecount * 2;
char* ret = (char*)malloc(sizeof(char) * (newlength + 1));
//注意要多开辟一个空间因为字符串的结束标志为‘\0’,最后一位放‘\0’.
for (int newi = newlength - 1, oldi = count - 1; oldi >= 0; newi--, oldi--)
{
if (s[oldi] == ' ')
{
ret[newi--] = '0';
ret[newi--] = '2';
ret[newi] = '%';
}
else
{
ret[newi] = s[oldi];
}
}
ret[newlength] = '\0';
return ret;
}
总结
当遇到问题的时候,我们需要多调试调试代码,放到VS上调试一下就知道错误在哪里了,也需要多画图。文章来源地址https://www.toymoban.com/news/detail-425798.html
到了这里,关于力扣刷题篇之《空白替换》的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!