首先分析空格可能出现的位置:
- 开头为空格,全部删掉,可用一个循环来实现:从头扫描字符串,是空格,直接跳过去;不是空格,就退出循环。
while(str[i]!='\0') //处理字符串开头为空格 { if (str[i]!=' ') { break; } i++; }
2. 空格在中间位置:逐个字符扫描,如果不是空格就拷贝;遇到连续多个空格,只添加第一个空格。
怎么判断是不是第一个空格呢?可以设置一个is_first_blank变量来确定。当遇到空格且是第一个空格时,拷贝过来,并置变量is_first_blank为0;当遇到非空格字符,直接拷贝,并重置变量is_first_blank为1。
3. 结尾有空格,需要删掉。if(str[j-1]==' ') //处理字符串末尾的空格:全部删掉。 { str[j-1]='\0'; } else { str[j]='\0'; }
完整代码如下:
/* 函数功能:删掉字符串多余的空格*/
#include <stdio.h>
#include <string.h>
void rm_other_blank(char * str)
{
int i=0;
int j=0;
int is_first_blank =1;
while(str[i]!='\0') //处理字符串开头为空格
{
if (str[i]!=' ')
{
break;
}
i++;
}
while(str[i]!='\0') //处理字符产中间为空格
{
if (str[i]!=' ')
{
str[j]=str[i];
is_first_blank=1;
j++;
}
else
{
if(is_first_blank==1)
{
str[j]=str[i];
is_first_blank=0;
j++;
}
}
i++;
}
if(str[j-1]==' ') //处理字符串末尾的空格:全部删掉。
{
str[j-1]='\0';
}
else
{
str[j]='\0';
}
}
int main()
{
char buf[50]="I love China! ";
rm_other_blank(buf);
printf("#%s#\n",buf);
return 0;
}
运行结果如下:

之前写过一篇删掉字符串所有空格,可以参考比较:【C语言作业5】删掉字符串所有的空格_良人笑-的博客-CSDN博客
这篇博客介绍如何使用C语言删除字符串中连续的多个空格,仅保留一个空格。通过分析空格可能出现的位置,如开头的空格,采用循环判断并跳过空格的方式实现。提供了完整代码及运行结果,并链接了之前关于删除所有空格的博客作为参考。

863

被折叠的 条评论
为什么被折叠?



