用C语言编写一个函数,用来删除字符串中的所有空格

 分享一下我做计算机二级C语言遇到的程序设计题以及我的思路与标准答案的不同理解

不喜欢的勿喷,希望可以帮到需要帮助的同学


既然要把字符串中的空格都删除,我的理解很简单,就是每当遇到空格的时候,就去遍历空格之后的其余字符,如果遍历到了既不是空格也不是\0的字符,就把这个字符移到前面空格的位置,然后使这个字符原本的位置为空

所以我一开始循环遍历整个字符串,直到遇见空格,把空格的位置记下来,然后接着从这个位置的下一个位置开始重新循环遍历,直到遇见符合条件的字符移到一开始记住位置的空格位置,然后此位置为空,然后break结束本次的循环,剩余的字符依次类推

我的这个方法用了两次for循环,整体来说时间复杂度肯定是较为不理想的


不喜欢我的代码的可以看一看答案较为简单的思路

答案的代码运用了指针,然后是直接覆盖的方法,思路较优,指针学的好的程序员们优先掌握这个方法,又简单思路又清晰,我不得不承认我的指针这块学的不扎实了

指针思路的代码块:

void fun (char *str)
{
	int i=0;
	char *p=str;
	while(*p)
	{
		if(*p!=' ')
		{
			str[i]=*p;
			i++;
		}
	p++;
	}
	str[i]='\0';
}

以下是以我的双循环遍历思路代码块为基础的总代码:

#include <stdio.h>
#include <ctype.h>
#include <conio.h>
#include <stdlib.h>
void fun (char *str)
{
	int i, j, len = strlen(str);
	for (i = 0; str[i] != '\0'; i++)
	{
		if (str[i] == ' ')
		{
			for (j = i + 1; j < len; j++)
			{
				if (str[j] != ' ' && str[j] != '\0')
				{
					str[i] = str[j];
					str[j] = ' ';
					break;
				}
			}
		}
	}
}
void main()
{
	char str[81];
	char Msg[]="Input a string:";
	int n;
	FILE *out;
	printf(Msg);
	gets(str);
	puts(str);
	fun(str); 
	printf("*** str: %s\n",str); 
}

运行结果:

6952f35819d54925ad6b7b204aa5c32f.jpg


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值