您的位置:首页 > 其它

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

2015-10-19 10:24 302 查看
在输入或输出字符串的时候,我们需要对现有的字符串进行简单的处理,比如去除字符串两的空格(空白字符),

我们定义两个下标,分别代表开始下标和最后下标(\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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: