概括
该函数接口用于删除输入字符串中额外的空格(多个连续空格将被优化为一个空格)
- 参数
str: input & output;传入的非空字符串地址。
- 返回值
无
- 注意
1、传入的str参数必须为可更改的字符串,不允许传入const char *类型的字符串
2、传入的必须为字符流,绝不允许传入字节流,此函数为处理字符串的接口。
3、该函数线程不安全,跨线程的使用该函数操作同一地址的字符串,可能会导致未知的错误;同样的,当另一个线程在执行此函数时,其他线程在访问被操作的字符串时可能访问的信息不完整,致使程序发生未知错误。
4、该接口未进行传入参数的非空判断,这样设计的主要原因是因为字符串操作可能是一系列操作,该接口可能只是配合其他接口使用,在此之前首先应该在外部确定字符串访问是安全的。
5、使用时应当知晓传入的str字符串将会被改变。
函数定义
static void remove_extra_spaces(char *str) {
char *p = str;
char *q = str;
int space_count = 0;
while (*p != '\0') {
if (*p == ' ') {
space_count++;
}
else {
space_count = 0;
}
if (space_count <= 1) {
*q++ = *p;
}
p++;
}
*q = '\0';
}
示例
代码
#include <stdio.h>
static void remove_extra_spaces(char *str) {
char *p = str;
char *q = str;
int space_count = 0;
while (*p != '\0') {
if (*p == ' ') {
space_count++;
}
else {
space_count = 0;
}
if (space_count <= 1) {
*q++ = *p;
}
p++;
}
*q = '\0';
}
int main() {
char arr[] = " h e ll o world";
remove_extra_spaces(arr);
printf("[%s] \n", arr);
getchar();
return 0;
}
输出
[ h e ll o world]
拓展
删除指定的多余字符
static void remove_extra_char(char *str, char c) {
char *p = str;
char *q = str;
int space_count = 0;
while (*p != '\0') {
if (*p == c) {
space_count++;
}
else {
space_count = 0;
}
if (space_count <= 1) {
*q++ = *p;
}
p++;
}
*q = '\0';
}