在输入或输出字符串的时候,我们需要对现有的字符串进行简单的处理,比如去除字符串两的空格(空白字符),
我们定义两个下标,分别代表开始下标和最后下标(\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;
}