字符串相信大家在生活中常用,今天我要为大家来讲解一点知识点:
- 字符串常量和字符数组
- 字符串常量:char* arr,占四个字节,不可以进行更改,为只读。多个字符串常量初始化为相同的值后,它们会指向相同的内存空间,会相等。
- 字符数组:char arr[],用几个字节分配几个字节,‘\0’占一个字节,可以更改,多个字符数组若初始化为一样的值,系统会为每个分配空间,所以不会指向相同的内存空间。替换空格的解决
2.字符串空格替换
- 问题描述:请实现一个函数,把字符串中的每个替换为“%20”例如输入“we are happy”,则输出”we%20are%20happy”。
- 问题解析:从题目形式上来看,是一个字符串经处理后会变长的题型,最开始我会想碰到空格后,先将后面的数进行移动,但是这样太过于复杂,并且浪费空间,这是一种从前向后替换的思路,它会使得有的元素移动两次。故我们换一种思路,就是从后到前的替换数据,这样所有的数字就只会后移一次,下面我们通过一张图来具体看看
# include <stdio.h>
# include <string.h>
void replace(char *a,int len)
{
int p=0;
int q=0;
int count=0;
for(int i=0;a[i]!='\0';i++)
{
if(a[i]==' ')
{
count++;
}
p++;
}
q=p+2*count;
while(p!=q)
{
if(a[p]==' ')
{
p--;
a[q--]='0';
a[q--]='2';
a[q--]='%';
}
else
{
a[q]=a[p];
p--;
q--;
}
}
}
void show(char *a,int len)
{
for(int i=0;a[i]!='\0';i++)
{
printf("%c ",a[i]);
}
}
int main()
{
char a[100]="we are happy.";
show(a,100);
printf("\n");
replace(a,100);
show(a,100);
}
运行结果:
加油哦!!!