首页 > 其他分享 >删除额外的空格

删除额外的空格

时间:2023-06-05 10:24:29浏览次数:38  
标签:count char 额外 删除 space 传入 空格 str 字符串

概括

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

  • 参数

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

标签:count,char,额外,删除,space,传入,空格,str,字符串
From: https://www.cnblogs.com/woshku/p/17457067.html

相关文章

  • LeetCode 450. 删除二叉搜索树中的节点
    classSolution{public:TreeNode*deleteNode(TreeNode*root,intkey){del(root,key);returnroot;}voiddel(TreeNode*&root,intkey){if(!root)return;if(key<root->val)del(root->left......
  • VSCode 如何将已编辑好的python文件中的 tab 键缩进转换成4个空格键缩进
    事情起源:使用vscode维护一个7年前的python项目,发现编辑后运行报错,提示缩进错误,原因是当时的项目使用tab做缩进,而我正在用的vscode是使用4空格做缩进,因此造成了缩进不匹配的问题。  如何解决?把自己的vscode缩进从4空格改为tab貌似是最可行的,但是考虑其他项目的匹配问题又总不能老......
  • 4、虚拟机单机、集群的克隆、删除脚本(以初始化好的虚拟机为模板)
    虚拟机克隆、删除脚本[root@ubunt~]#catclone.sh#!/bin/bash##./etc/init.d/functions(如果是ubuntu,注释此行)Red="\e[1;31m"Purple="\e[1;35m"Green="\e[1;32m"Blue="\e[1;36m"Yellow="\e[1;33m"End="\e[0m&......
  • 删除视图DeleteView
    视图类DeleteView的使用方法与视图类UpdateView有相似之处,但两者的父类继承关系有所差异。在源码文件里分析视图类DeleteView的定义过程,以流程图的形式表示类的继承关系视图类DeleteView只能删除单条数据,路由变量为模型主键提供查询范围,因为模型主键具有唯一性,所以通过主键查询能精......
  • 用Python开发输入法后台(10)——删除已有词
    有些已经组好的词,可能是不小心组错了,需要删除它,我的输入法暂时还不支持,现在来实现它.用户场景用户正常选词,如下所示:然后按Del键,进入删除模式最后按F1~F9键,删除指定的词......
  • 无法删除索引 1553 - Cannot drop index ‘fk_pptn_r_emtc‘: needed in a foreign ke
    标题标题:解决问题:1553-无法删除索引‘fk_pptn_r_emtc’:外键约束需要引言:在数据库管理中,经常会遇到各种问题和错误。其中之一是"1553-无法删除索引‘fk_pptn_r_emtc’:外键约束需要"错误。这个错误可能会导致数据库操作受阻,影响系统的正常运行。在本篇博客中,我们将深入探讨这......
  • 如何在 app 上删除推特账号
    首先,点击首页右上角的「≡」,然后点击「Settings」点击「PrivacyandSecurity」找到「Deletemyaccount」tab,把时间修改为1month,表示1个月不在线就自动删除账号。最后退出登录twitter即可......
  • ⌈力扣⌋删除字符串中的所有相邻重复项
    题目给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在S上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。示例:输入:"abbaca"输出:"ca"解释:例如,在"abbaca"中,我们可以删除"bb"由......
  • 批量删除Word表里的空
    问题:怎么批量删除Word表里的空格解决:如果真的是空格,查找替换就可以了,但是首先需要确定,“空格”真的是空格吗?从下图可以看出,本示例中的“空格”,实际是【首行缩进】。如果需要修改的地方较少,手动调整首行缩进符即可;或者选取整个表,在【开始】选项卡下的【段落】对话框里找到【首行缩进......
  • 删除指定内容行与删除指定行(Power Query)
    问题:删除指定内容(丙)行 VS 删除指定行(第3行)删除指定内容(丙)行=Table.SelectRows(步骤名,each([列名]<>"丙"))删除指定行(第3行)=Table.AlternateRows(步骤名,2,1,Table.RowCount(步骤名)) ......