删除额外的空格

发布时间 2023-06-05 10:15:11作者: woshku

概括

该函数接口用于删除输入字符串中额外的空格(多个连续空格将被优化为一个空格)

  • 参数

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';
}