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

来源:互联网 发布:爱青岛软件 编辑:程序博客网 时间:2024/06/03 02:57

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

代码:

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;elses[j++] = ' ';p--;}p++;}s[j] = '\0';}

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

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

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

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

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

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



原创粉丝点击