首页 > 编程知识 正文

替换空格----newcoder

时间:2023-05-04 16:28:46 阅读:223913 作者:4421

题目描述

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

newcoder 题目链接

以下为 2019.6.5 更新

class Solution {public:void replaceSpace(char *str,int length) { /** * 我们不妨先统计当前字符串中所有的空格,之后从后往前替换 * 在不开辟新空间的情况下,如果从前往后替换,会覆盖掉原字符串中的字符 */ // 如果字符串为空,不需要处理 if (!str) { return ; } int blankCount = 0; int oldStrLen = strlen(str); for ( int i = 0; i < oldStrLen; ++i) { if(str[i] == ' ') { ++blankCount; } } // 我们统计到了原字符串中所有的空格,那么替换之后字符串的长度应该为 // 我们不妨先做个判断吧,万一源字符串中没有空格呢,我们就需要处理 if (blankCount == 0) { return; } // 为什么新长度是 源字符串长度 + 2 * blankCount很好想 // 我们是要替换空格,而空格本来就在原字符串中 // int oldStrLen = strlen(str); int newStrLen = strlen(str) + 2 * blankCount; // 之后开始搬移元素以及替换 // 这里我们假设题目给我们的空间足够容纳下替换后的字符串,不考虑越界的情况了 // C语言是用数组模拟的字符串,并且一个C风格的字符串是以 '' 结尾 // 所以直接把 str[newStrLen] = str[oldStrLen]没有任何问题 while(oldStrLen >= 0) { if(str[oldStrLen] == ' ') { str[newStrLen--] = '0'; str[newStrLen--] = '2'; str[newStrLen--] = '%'; --oldStrLen; } else { str[newStrLen--] = str[oldStrLen--]; } }}};

以上为 2019.6.5 更新

题解:
拿到这个题,先分析题意,需要把所有的空格都替换为 “%20”,很明显这个"%20"是一个字符串,不是一个字符,要替换全部空格,字符串的长度肯定会增加,所以必定要统计出字符串中到底有多好个空格,然后新的字符串有多长,然后从后往前依次拷贝,遇到空格替换。

接下来是通过牛客oj的代码:
代码已上传到 github,可用 git 工具下载查看
github 代码链接,欢迎点击查看

class Solution {public:void replaceSpace(char *str,int length) { int countOfBlank = 0; int lenOfOriginalStr = 0; char * p = str; if(str == NULL) { return; } while(*p) { ++lenOfOriginalStr; if(*p++ == ' ') { ++countOfBlank; } } int len_total = lenOfOriginalStr + 2 * countOfBlank; char * str1 = str + len_total; // 指针偏移到 '' char * str2 = str + lenOfOriginalStr; // 指针偏移到原始字符串最后 while(str1 > str2) { if(*str2 == ' ') { *str1-- = '0'; *str1-- = '2'; *str1 = '%'; } else { *str1 = *str2; } --str1; --str2; }}};

有什么问题或者有更好的解法,欢迎留言探讨,谢谢大家 ?

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。