删除字符串开始及末尾的空白符,并且把数组中间的多个空格(如果有)

题目:删除字符串开始及末尾的空白符,并且把数组中间的多个空格(如果有)

代码:

void DelSpace(char *s)
{
	if(s == NULL)
		return;
	int flag = 0 ;
	if(*s == ' ')
		flag = 1;
	char *p = s;
	int j = 0;
	while(*p != '\0')
	{
		if(*p != ' ')
			s[j++] = *p;
		else
		{
			while(*p == ' ')
				p++;
			if(flag==1 || *p=='\0')
				flag = 0;
			else
				s[j++] = ' ';
			p--;
		}
		p++;
	}
	s[j] = '\0';

}

上述代码中需要注意的是函数调用的约束。

从代码中可以看到在函数内部并没有自己分配新的空间,同时也没有在参数列表中引用额外开辟的空间,所有的改变都是在原有字符串的基础上进行修改的,这个地方就需要注意了,因为字符串的声明有两种方法

//字符数组
char str[] = "Hello World!"
另外一种是字符串常量

//字符串常量
char * str = "Hello World!"
但是上述两个字符串有明显的区别,字符数组是字符串变量,可以调用上面的DelSpace()函数直接在变量空间上进行修改,但是字符串常量是一个常量,常量是不可修改的,因此如果声明的是字符串常量的话,调用上述删除空格函数会导致

Unhandled exception in hua.exe: 0xC0000005: Access Violation. 这主要是由于要修改字符串常量的错误造成。

因此如果不分配空间直接修改仅适用于字符串数组。而不能用于字符串常量。



你可能感兴趣的:(String)