思路:不开辟新空间,直接在字符串上直接进行操作,把空格用后面的字符串填充。
解法:除数组名本身这个指针外,只需创建一个指针来指向空格后面的字符,将字符赋给空格后,原字符所在位置置为空格,两个指针同时向后移动一步,继续循环直到 指向字符的指针移动到数组末尾(即指针指向的值为'\0')为止。
代码实现:
#include<stdio.h>
#include<string.h>
void delete_blank(char *ch)
{
while (*ch != ' ')//将ch指针指向第一个空格位置
{
if (*ch == '\0')
return;//字符串中没有空格,直接返回
ch++;
}
char *c = ch + 1;//让c指针指向出现空格后的第一个字符串
while (*c == ' ')
c++;//找到非空格字符
while (*c != '\0')
{
if (*c != ' ')
{
//将空格换为后面出现的字符,换过去的字符置为空格
*ch = *c;
*c = ' ';
ch++;
}
c++;
}
*ch = '\0';
return;
}
int main()
{
char cc[15];
gets_s(cc, 15);
delete_blank(cc);
printf("%s\n", cc);
system("pause");
return 0;
}
测试用例: