修改空格成一个字符#
#include<stdio.h>
#include<string.h>
void SwpChar(char *str,int len)
{
int i=0;
while(str[i]!='\0')
{
if(str[i]==' ')
str[i]='#';
i++;
}
}
int main()
{
char str[100]="I am a student.";
SwpChar(str,strlen(str));
printf("%s\n",str);
return 0;
}
for循环格式
void SwpChar(char *str,int len)
{
int i;
for(i=0;str[i]!='\0';i++)
{
if(str[i]==' ')
str[i]='#';
}
}
修改空格成##
void SwpChar(char *str,int len)//传长度,从库里直接调用
{
int i=0;
while(str[i]!='\0')//判断字符串没有结束,(字符串遇\0直接结束)
for(int i=0;str[i]!='\0';i++)
{
if(str[i]==' ')//判断条件,空格
{
str[i]='#';//条件为真,则在i号下标的位置把里面元素改成'#'在数组里一个元素替换成另一个元素是可行的,但是一个元素替换成两个元素时,第二个会占用第i+1号下标的元素,所以需要定义一个循环,在替换字符后将其后面的统一向后移动,避免覆盖
for(int j=len;j>i+1;j--)
{
str[j]=str[j-1];//元素统一向后移一位,把空出的一个单元格赋成'#'
}
str[i+1]='#';
len+=1;//这句为满足不被覆盖的条件,长度自动加一,
}
i++;
}
}
在for(int j=len;j>i+1;j--)中为什么用倒序循环的原因:如果为正序(j=i;j<len;j++),第一个往后移的字母覆盖它后面的字母,导致继续循环往后移动后所有的元素均成为第一个后移的元素,无意义.所以把循环设置为后序循环,将字符串最后自动隐藏的'\0'先后移.