前言:内容包括:题目,代码实现,大致思路,代码解读
题目:
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = "We are happy."
输出:"We%20are%20happy."
代码实现:
char* replaceSpace(char* s)
{
int len = strlen(s);
int i = 0;
int count = 0;
for(i=0;i<len;i++)
{
if(s[i]==' ')
{
count++;
}
}
char*tmp = (char*)malloc(sizeof(char)*(len+2*count+1));
int j = 0;
for(i=0;i<len;i++)
{
if(s[i]!=' ')
{
tmp[j++]=s[i];
}
else
{
tmp[j++]='%';
tmp[j++]='2';
tmp[j++]='0';
}
}
tmp[j]='\0';
return tmp;
}
大致思路:
1 统计原字符串中空格的个数
2 使用malloc动态申请内存空间,用于存放替换后的新字符串
此空间的大小为:len+2*count+1
len:原字符串的字符个数
2*count:由于一个空格要替换成%20,一个空格的空间是一个字符大小,但是%20需要占用3个空间,故而每替换一个空格,需要额外的两个空间来存放2,0
1:需要开辟一个空间存放新字符串的结束标志\0
3 遍历原字符串,若当前元素不是空格,则将此字符存入新开辟的空间中
若当前元素是空格,则连续存入%20,这三个字符
遍历结束后需要手动加上\0
4 返回新字符串的起始地址
代码解读:
int len = strlen(s);
int i = 0;
int count = 0;
for(i=0;i<len;i++)
{
if(s[i]==' ')
{
count++;
}
}
统计空格个数
char*tmp = (char*)malloc(sizeof(char)*(len+2*count+1));
开辟新空间存放替换后的新字符串
int j = 0;
for(i=0;i<len;i++)
{
if(s[i]!=' ')
{
tmp[j++]=s[i];
}
else
{
tmp[j++]='%';
tmp[j++]='2';
tmp[j++]='0';
}
}
tmp[j]='\0';
遍历原字符串将非空格字符存入新空间中
若是空格,则连续存入%20
遍历结束后,原字符串已经替换完毕,手动加上\0,作为新字符串的结束标志