请实现一个函数,把字符串
s
中的每个空格替换成"%20"。来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/ti-huan-kong-ge-lcof
既然要把字符串中的 空格替换成"%20",那我们就要找到字符串中的空格,并记录个数
因为要把' '替换成"%20" ,每替换一次,字符个数就增加2,所以数组大小需要变化
这里我们利用malloc函数开辟一块空间,作为新数组的空间,加1是为了给'\0'腾个地方
接着我们利用双指针来进行替换(双指针我还没太弄明白,等我在进修进修,尝试了双循环,力扣不给过)
我们相当于创建了一个新的数组,所以别忘了把空格以外的数放进新数组中吼
重新创建完后,别忘了在最后给个结束标志 '\0' ,然后返回p(新的数组地址哈,反原来的那个数组地址没用哈)
完整代码
char* replaceSpace(char* s)
{
char* tem = s;
int i = 0;
int sz = strlen(s);
int count = 0;
for (i = 0; i < sz; i++)
{
if (s[i] == ' ')//字符串用"",单个字符用''
{
count++;//记录空格个数
}
}
int news = sz + count * 2;
char* p = (char*)malloc(sizeof(char)*(news) + 1);//新的数组大小
int j = 0;
for (i = 0, j = 0; i < sz; i++, j++)
{
if (s[i] == ' ')
{
p[j] = '%';
p[j + 1] = '2';
p[j + 2] = '0';
j += 2;
}
else
{
p[j] = s[i];
}
}
p[news] = '\0';
return p;
}
这个是主函数部分,力扣里不用,但我感觉这个更有助于返回的理解,所以我也写上了
int main()
{
char arr[10001] = "We are happy.";
//printf("%d", strlen(arr));
char* ret = replaceSpace(arr);
printf("%s\n", ret);
return 0;
}