1.题目描述:
请实现一个函数,将字符串中的每个空格替换成"%20"。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
2.解题思路:
a) 将字符串转换为字符数组,遍历一次,统计出空格的个数;
b) 构建出新的字符数组,初始化的大小=原来的字符数组长度+空格个数x2
c) 遍历一次,复制,当不为宫格时直接复制,当为空格时,则把%20这三个字符复制过去
代码如下:
#include <stdio.h>
#include <stdlib.h> //使用malloc必须加上此头文件
int main()
{
char str[] = "We Are Happy.";
printf("替换前:%s\n", str);
int strLength = strlen(str);
int nullLength = 0;
// 用for循环计算出字符串内空格数nullLength
for (int i = 0; i < strLength; i++)
{
if (str[i] == ' ')
{
nullLength++;
}
}
// 由于空格只占一位,而%20占三位,因此字符串的总长度发生变化
int replaceLength = strLength + nullLength * 2;
//创建一个新数组存放替换后的数据
char* newChar = (char*)malloc(replaceLength * sizeof(char));
if (newChar == NULL)
{
printf("内存分配失败!");
}
int newCharIndex = 0;
for (int j = 0; j <= strLength; j++)
{
if (str[j] != ' ')
{
newChar[newCharIndex++] = str[j];
}
else
{
newChar[newCharIndex++] = '%';
newChar[newCharIndex++] = '2';
newChar[newCharIndex++] = '0';
}
}
printf("替换后:%s\n", newChar);
return 0;
}
注意:字符串用" ",单个字符用' '.
3.拓展:
拓展1——malloc开辟空间
a) malloc用于申请一块连续的指定大小的内存块区域。
b) 头文件:使用malloc必须添加头文件#include <stdlib.h>
c) 使用方法:
char* newChar = (char*)malloc(replaceLength * sizeof(char));
d) 返回值:申请成功,返回空间的首地址;否则,返回NULL指针
e)空间的释放:free();
拓展2——strlen()与sizeof()的区别
a) strlen()用于求字符串的长度。以'\0'结尾。
b) sizeof()用来求指定变量或变量类型等所占用内存的大小。