题目描述:
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路为:循环字符串,遇到空格,将后面的暂时保存,将空格位置空“\0”,前面的字符串链接一个“%20”,再链接上后面的字符,重复该操作,代码如下:
void replaceSpace(char *str,int length) { char* head = str;//提取指针指向第一个字符 int count = 0;//记录前面走了多少字符, 以计算后面需要多少内存去保存后面的字符串 while(*head) { count++; if(*head==' ') { char* temp = (char*)malloc(length-count);//分配内存 保存后面的字符串 strcpy(temp,head+1);// *head = '\0';//将空格位置空“\0” strcat(str,"%20");//前面的字符链接“%20” strcat(str,temp);//再将后面的字符串链接上 head+=2;//从该位置后移2个位置(因为%20占3个字节,相对于原先的空格‘ ’多了2个单位长度,因此后移2) } head++; } }
还有看到别人的一种更简便的方法:将char* 转换为string类型,利用string的函数将空格替换为“%20”
代码如下:
void replaceSpace(char *str,int length) { string s(str); int i=0; while((i=s.find(' '))!=-1) { s.erase(i,1); s.insert(i,"%20"); } auto ret = s.c_str(); strcpy(str,ret); }
递归思路后续再加......