思想:
要改变字符串的内容,并且"%020"替换空格后,字符串的长度增加了,这个时候再将字符串当作一个固定长度的字符数组就行不通了,判断条件非常复杂。故采用另一种思想:先统计空格总数,每替换一个空格,字符串的长度就要多出3个单位,所以可以提前申请足够的内存,用来存放替换好的字符串;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int amount(char *str,int str_len) {//此函数用于统计字符串中空格的数量
int amount_0 = 0;
for (int i = 0; i < str_len; ++i) {
if (str[i] == ' ') {
amount_0++;
}
}
return amount_0;
}
int main() {
int i = 0,j=0;
char str[50] = "hello wolrd how";
int amount_0 = amount(str, strlen(str)); //空格数
int cpcy = strlen(str) + 3 * amount_0;
char *p = (char*)malloc(cpcy); //申请辅助空间
memset(p, 0, cpcy);
//一定要将申请的空间初始化,
//否则由于strcat(char *str1,char *str2)函数会将str2接到str1的末端,
//不初始化的末端超出了我们申请的堆空间范围,会产生报错
for (i=0; i