strim去掉字符串两边的空格

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

#define isspace(c) ((c) == ' ' || (c) == '\t' || \
					(c) == '\r' || (c) == '\n')

//用于去掉字符串头部的空格
char* skip_space(const char* str)
{
	while (isspace(*str))
	{
		++str;
	}
	return (char*)str;
}

//用于去掉字符串头部+尾部的空格。str前面没有const,它指向的
//字符串会被修改
char* strim(char* str)
{
	unsigned int size;
	char* end;
	
	str = skip_space(str); //str指向头部第1个非空格字符
	size = strlen(str);

	if (0 == size) //str只含有若干空格和若干空字符
	{
		return str; //函数直接结束
	}

	end = str + size - 1; //end指向str最后1个字符,非'\0'

	/***************************************************************
	 * end >= str,是怕end--跑到首字符前面。???难道数组首元素都在最低
	 * 地址,所以end值大于等于str??? 等号是size为1的情况。
	 ***************************************************************/
	while (end >= str && isspace(*end))
	{
		end--;
	}
	
	*(end+1) = '\0';  
	
	return str;
}

int main(int argc,const char* argv[])			
{				
	char a[20] = "  12345  ";

	char* b = strim(a);
	
	puts(b);
	printf("%d\n",strlen(b));
	
	return 0;			
}	

在这里插入图片描述

发布了39 篇原创文章 · 获赞 16 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/wanggong_1991/article/details/94452145