- 题目描述:
-
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
- 输入:
-
每个输入文件仅包含一组测试样例。
对于每组测试案例,输入一行代表要处理的字符串。
- 输出:
-
对应每个测试案例,出经过处理后的字符串。
- 样例输入:
-
We Are Happy
- 样例输出:
-
We%20Are%20Happy
开始做这道题时,理解不大正确,我的理解是将连续的空格当作单词之间的分隔符,针对连续的空格只输出一个%20。这样,就将问题转换成单词的识别问题了,将一个字符串中的单词识别出来,并在每个单词的末尾添加一个替换字符。
但是题目真正的要求是,将每一个空格都进行一次替换。
这两种方法解题的思路都差不多,将每个单词开始位置的指针记录下来,在这个单词结束的时候,添加一个' '作为字符串结束的标志,因此就可以将这个单词直接进行输出(利用到的性质主要就是字符串的输出以 结束),而不需要另外开辟其他的空间。
由于输入中并没有指定输入的最大长度,所以可能输入的长度可长可短。所以此时,采用的方法就是动态分配内存,先分配一个固定大小的内存,然后在需要的时候再增加固定的长度,使用realloc(source,size)实现。当然,也可以一开始就分配一个较大的空间,节省后续空间分配的时间开销。
代码如下所示:
#include<stdio.h> #include<stdlib.h> #include<string.h> #define N 100 /* 将原来的字符串a中的空格用insertString代替.这种方法是将连续的空格作为一个空格 */ void replaceSpace(char* a,int len,char *insertString){ bool isSpace = true; char** address = (char ** )malloc(sizeof(char *)*len); int count=0; // 记录单词的个数 for(int i=0;i<len;i++){ if(a[i]==' '&& !isSpace ){ //一个单词结束,需要将之前的单词记录下来 a[i]='