一个删除字符串中空格的函数

myclass242 2014-07-13 09:32:31
函数如下
#include<string.h>
void skong(char *str)
{
while(*str)
{
if(*str==' ')
{
strcpy(str,str+1);
continue;
}
str++;
}
}

驱动函数如下
#include<stdio.h>
#define SIZE 81
void skong(char *);
int main(void)
{
char ar[SIZE];
puts("请输入字符串,输入空行结束");
while(fgets(ar,SIZE-1,stdin)&&*ar!='\n')
{
puts("删除空行之前");
fputs(ar,stdout);
skong(ar);
puts("删除空行之后");
fputs(ar,stdout);
puts("请输入字符串,输入空行结束");
}
return 0;
}

程序运行结果如下

为什么会打印结果有的少有的多?
...全文
255 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ImAmelie 2014-07-13
  • 打赏
  • 举报
回复
1.我不赞同1楼的第1点 2.我觉得楼上的代码可以有效实现楼主要求 下面我是按楼主的代码改的 测试过 没有毛病

#include<stdio.h>
#define SIZE 81
void skong(char *);
int main(void)
{
	char ar[SIZE];
	puts("请输入字符串,输入空行结束");
	while (fgets(ar, SIZE, stdin) != NULL && *ar != '\n')//改1
	{
		puts("删除空行之前");
		fputs(ar, stdout);
		skong(ar);
		puts("删除空行之后");
		fputs(ar, stdout);
		fflush(stdin);//改2 这个纯个人习惯
		puts("请输入字符串,输入空行结束");
	}
	return 0;
}
#include<string.h>
void skong(char *str)
{
	while (*str)
	{
		if (*str == ' ')
		{
			strcpy(str, str + 1);
			continue;
		}
		str++;
	}
}
编译器:VS2013
brookmill 2014-07-13
  • 打赏
  • 举报
回复
1. 使用strcpy的时候要求源串和目的串不能有重叠,你这个明显有重叠,结果就看人品了。 2. strcpy这个函数不安全,因为它没有任何边界检查,很容易造成目的串溢出。可以用strncpy或其它一些安全的函数替代。 3. strcpy的思路,每次删一个空格就要把后面的所有字符复制一次,效率太低。
void RemoveSpaces(char str[])
{
  char *p_src, *p_dst;

  if (str == NULL) {
    return;
  }
  for (p_src = p_dst = str; *p_src != '\0'; p_src++) {
    if (*p_src != ' ') {
      *p_dst++ = *p_src;
    }
  }
  *p_dst = '\0';
}

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧