C语言,将数组中多余的空格去除掉

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言,将数组中多余的空格去除掉相关的知识,希望对你有一定的参考价值。

比如有以下字符串
a bcd e f g.
去除掉多字符之间多余的空格,只保留一个.
去除后的结果
a bcd e f g.
以下是我写的问题函数.
该函数有N多错误,求修正.
void deblank(char string[])

int i,tmp;
int sign=0;
int last=0;
for(i=0;string[i]!='\0';i++)

if(string[i]==' ')

sign+=1;

if(sign==2)

tmp=i;
while(string[tmp]!='\0')

string[last]=string[tmp];
tmp++;
last++;

string[last]='\0';
sign=0;

last=i;

void deblank(char string[])

int i=0;
int j=0;
while(1)

//检测字符串是否结束
if(string[i]=='\0')

string[j]='\0'; //设置字符串结束
break;


if(string[i]==' '&&string[i+1]==' ')
//两个空格,略过,不拷贝


else
//拷贝字符
string[j++]=string[i];

i++;



这样就可以实现了,自己定义个数据调用下看看
int main(void)

char Data[]="a bcd ef g";
deblank(Data);
printf("%s",Data);
追问

我还是比较关心我那函数错在哪,,

追答

按照你的修改 问题太多了。
void deblank(char string[])

int i,tmp;
int sign=0;
int last=0;
for(i=0;string[i]!='\0';)

if(string[i]==' ')

sign+=1;

else
//防止一个空格误加,必须是两个连续的空格才加
sign = 0;

if(sign==2)

tmp=i+1;
while(string[tmp]!='\0')

string[last]=string[tmp];
tmp++;
last++;

string[last]='\0';
sign=0;
i=0;

else

i++;

last = i;

参考技术A 你的程序是找到空格,就把空格全部移到数组开头,因为你的last的初始值为0,而且把所有的功能写在一个函数里的做法不好,我们应该尽可能的保证一个函数就是个原子操作。我改的程序如下

# include <stdio.h>

void move_array (char * a)

while(*(++a) != '\0')
*(a-1) = *a;
return;


int is_blank (char arg)

return (arg == ' ') ? 1 : 0;


void delete_blank (char * argv)

while (*(argv++) != '\0')
if(is_blank(*argv))
move_array(argv);
return;


int main(void)

char s[] = "he l lo world!";
printf("%s\n", s);
delete_blank(s);
printf("%s\n", s);
return 0;
追问

虽然说能达到目的,但题目的要求是一个函数来完成,,,,另外,,我想知道我那函数错哪了,,,求指点,,

参考技术B 优化好了,请验收
void deblank(char string[])

int i , j=0;
for(i=0;string[i];i++)

if(string[i]==' ') //如果是空格

string[j++] = string[i] ;//先记保留一个
while( string[++i] ==' '); //过滤掉连续的后续空格

//运行到这里,string[i]一定不是空格,记下来
string[j++] = string[i] ;



int main()

char str[]="a bcd e f g.";
printf("old=[%s]\n" , str );
deblank( str );
printf("str=[%s]\n" , str );
return 0;
追问

我还是比较关心我那函数错在哪,,

参考技术C 你要去掉多余的空格。可以在一字符串中,进行检测,当String[i]为空格“ ”,时做个记录。,检测String【i++】是否为“ ”,是的话就删除,不是的话,继续前进。 参考技术D 从数组的最小下标开始检索,当遇到空格时就把他后面的字符一次向前填充空格,然后在最后一个字符后面加上字符结束符号"\0"

以上是关于C语言,将数组中多余的空格去除掉的主要内容,如果未能解决你的问题,请参考以下文章

C语言-删除字符串空格

编程去掉字符串中的多余空格

C语言中输入字符串,里面有空格,怎么根据空格把字符串分开,并存在数组里?

source insight 保存时删除多余空格,去除多余空格 space tab键

c语言去除字符串左边空格、TAB键、换行符

c语言 讲一个字符串str以空格为分割,分割后输出到一个一维数组