c总结5 --- 去除两边空格(空白字符)(指针学习4)

这篇博客介绍了如何在C语言中去除字符串首尾的空格或空白字符。通过定义两个下标,分别跟踪非空白字符的起始和结束位置,计算有效字符长度和首地址,从而实现字符串处理。

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

在输入或输出字符串的时候,我们需要对现有的字符串进行简单的处理,比如去除字符串两的空格(空白字符),

我们定义两个下标,分别代表开始下标和最后下标(\0前位置,不是\0),不断的循环 前面的下标自加,后面的下标自减,直到遇到非空白字符终止。

此时,我们就可以知道两个关键要素:1、有效字符的长度;2、有效字符的首地址

我们可以计算出来有效字符是多少, 比如前面的下标为2, 后面的下标为4  此时可以用 4-2,但是这样少算了一个(不信的话你自己数一数),所以在加上1即可。

我们可以借助数组的首地址,加上前面的下标 便可以获取到有效字符的首地址。

其他看代码


直接上代码

#include "stdafx.h"
#include <string.h>
#include <stdlib.h>
#include <ctype.h>


/************************************************************************/
/* 函数名称:myStrTrim
/* 函数功能:  将前后 含有空白字符的字符串 提出出来
/* 参数1:	前后含有空白字符的字符串
/* 参数2:	去除空白字符的字符串
/* 返回值: 非0代表失败
/* 说明:
#include <ctype.h>
int isspace( int ch );
如果参数是空格类字符(即:单空格,制表符,垂直制表符,满页符,回车符,新行符),
函数返回非零值,否则返回零值。

/************************************************************************/
int myStrTrim(char * p, char * buf)
{

	int ret = 0;
	int ncount = 0;
	//定义两个下标  一个从0开始  一个从后面开始
	int i, j;

	if (p == NULL || buf == NULL)
	{
		ret = -1;
		return ret;
	}

	//第一个下标
	i = 0;
	//最后一个下标, 是 \0前面的字符的下标
	j = strlen(p) - 1;

	//如果是空白字符 并且 不为'\0' 开始下标自增
	while (isspace(p[i]) && p[i] != '\0')
	{
		i++;
	}

	//如果是空白字符 并且j不是0 末尾下标自减
	while (isspace(p[j]) && j>0)
	{
		j--;
	}

	//用后面的下标 减去 前面的下标 获取到中间的字符数量  
	//因为多减一个 所以再加一
	//这就获取到了 有效字符串 不含有\0 的字符个数 
	ncount = j - i + 1;

	//从 p+i的位置 拷贝 ncount个字符到 buf中去
	strncpy_s(buf, ncount + 1, p + i, ncount);

	//最后一个字符添加上 \0
	buf[ncount] = '\0';

	return ret;

}

int _tmain(int argc, _TCHAR* argv[])
{
 

	char p[] = "  adc  ";
	char buf[120] = { 0 };
	int a = myStrTrim( p,buf);
	printf("%d  %s \n", a, buf);

	system("pause");
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值