c语言实现去除字符串中空格

本文详细介绍了四种在C语言中删除字符串中空格的函数实现:CutSpace1、CutSpace2、CutSpace3和CutSpace4。分别讨论了它们的空间分配、参数传递方式和对原始字符串的影响。通过实例演示了每种方法的用法和结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述


1.void CutSpace1(char* StrRes, char* StrDec)

在调用函数申请栈空间,可以在被调用函数中使用;
不改变原来字符串;

#include<stdio.h>
#include<stdlib.h>

//StrDec即是输入又是输出
void CutSpace1(char* Res, char* Dec)
{
	//int i = 0;
	for (; *Res != '\0'; Res++) {
		if (*Res != ' ')
			*Dec++ = *Res;//'++' 优先级比 '*'高,但是这里'++'作为后缀,先进行*Dec,再自加
	}

	*Dec = '\0';
	return;
}

int main() {
	char StrRes[] =  "   hello  moto!  " ;
	char StrDec[64] = "";

	CutSpace1(StrRes, StrDec);
	printf("%s\n", StrDec);
	return 0;
}

2. int CutSpace2(char** StrRes,int* len)

在被调用函数中申请堆空间,在调用函数中也可以使用;
用二级指针作为形参,

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

/*char* CutSpace2(char* StrRes, int max)
{
	int i = 0;
	char* ptr = (char*)malloc(max*sizeof(char));
	while(*StrRes)
	{
		if(*StrRes!= ' ')
			ptr [i] = *StrRes;
		StrRes++;
	}
	//使用数组的形式,而不是指针的形式,是为了方便得到数组首地址,方便显示赋值后的数组
	ptr [i] = '\0';
	return ptr ;
}

int main() {
	char StrRes[] =  "   hello  moto!  " ;
	int max = sizeof(StrRes) / sizeof(char);
	
	printf("%s\n", CutSpace2(StrRes, max));
	return 0;
}
*/
int CutSpace2(char** Res,int* len)
{
	int i = 0;
	int j = 0;
	char* ptr = (char*)malloc(16*sizeof(char));
	strcpy(ptr,"   hello  motto!");
	for(;ptr[i] != '\0';i++)
	{
		if(ptr[i] != ' ')
			ptr[j++] = ptr[i]; 
	}
	ptr[j] = '\0';
	*len = str(ptr);
	*Res= ptr;//Res是二级指针,加'*'解引用得到一级指针,即字符串首地址,也就是StrRes; (char*)*Res = (char*)ptr;
	
	return 0;
}

int main()
{
	char *StrRes = NULL;
	int len = 0;
	CutSpace2(&StrRes ,&len);
	printf("%s  %d\n",StrRes ,len);
	if(StrRes )
	{
		free(StrRes );
		StrRes = NULL;
	}
	return 0;
	
}

3. void CutSpace3(char* StrRes)

在被调用函数中申请栈空间,存储传进来的调用函数的字符串地址,即复制了一份字符串在被调用函数栈空间中。
直接改变了原来的字符串。

#include<stdio.h>
#include<stdlib.h>

void CutSpace3(char* StrRes)
{
	int i = 0;
	char* ptr = StrRes;
	while(*ptr)
	{
		if(*ptr != ' ')
			StrRes[i++] = *ptr;//StrRes[i]  等价于 *(StrRes + i)
		ptr++;
	}

	StrRes[i] = '\0';
	return;
}

int main() {
	char StrRes[] =  "   hello  moto!  " ;
	CutSpace3(StrRes);
	printf("%s\n", StrRes);
	return 0;
}

4. void CutSpace4(char* StrRes)

直接修改调用函数申请的栈空间中的数据;

#include<stdio.h>
#include<stdlib.h>

void CutSpace3(char* StrRes)
{
	int i = 0;
	int j = 0;
	for(;StrRes[i] != '\0';i++)
	{
		if(StrRes[i] != ' ')
			StrRes[j++] = StrRes[i];
	}

	StrRes[j] = '\0';
	return;
}

int main() {
	char StrRes[] =  "   hello  moto!  " ;
	CutSpace4(StrRes);
	printf("%s\n", StrRes);
	return 0;
}

参考文章:C语言——删除字符串中的空格

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值