输入一串字符,去掉字符串中多余的空格(连续空格中自保留一个)
代码如下:#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<Windows.h>
int main(void)
{
void cl(char *a);
int n;
char *a;
printf("输入欲处理的字符串长度: ");
scanf("%d",&n);
if((a=(char *)malloc((sizeof(char)*n)+1))==0)
{
printf("Malloc error!");
}
printf("输入欲处理的字符串:\n");
fflush(stdin); //清空流
gets(a);
cl(a);
printf("未处理之前长度为:%d\n",strlen(a));
printf("处理后长度为:%d\n",strlen(a));
printf("处理后字符串:\n%s",a);
getch();
return 0;
}
void cl(char *a)
{
int f,i,qj,kg=0,cx;
for(f=0;a[f]!='\0';f++)
{
if(a[f]==' ')
{
kg++;
}
else
{
if(kg>1)
{
for(qj=(f-kg)+1,i=f,cx=qj;a[i]!='\0';qj++,i++)
{
a[qj]=a[i];
a[i]=' ';
}
kg=0;
f=cx;
}
else
kg=0;
}
}
for(f=(strlen(a)+1);a[f]==' '||a[f]=='\0';f--)
{
;
}
if(a[f]!=' '&&a[f]!='\0')
{
a[f+1]='\0';
}
}
没写注释将就将就看吧...
问题是输入一个字符串后(中间含有连续空格,单个空格不做处理)处理后空格调到字符串后面了 本来用这段语句
for(f=(strlen(a)+1);a[f]==' '||a[f]=='\0';f--)
{
;
}
if(a[f]!=' '&&a[f]!='\0')
{
a[f+1]='\0';
}
来把尾部的空格从有效字符开始截断 可是失败了...好像就是这段出了问题 俺要睡觉了 明天我在看看 嘿嘿..大家帮忙看看啊!! 谢啦