c语言去除字符串的空格

99ANYc3cd6
预计阅读时长 8 分钟
位置: 首页 C语言 正文

方法1:去除所有空格(包括中间空格)

遍历字符串,跳过所有空格字符,将非空格字符前移。

#include <stdio.h>
#include <string.h>
void remove_all_spaces(char *str) {
    int i = 0, j = 0;
    while (str[i]) {
        if (str[i] != ' ') {
            str[j++] = str[i];
        }
        i++;
    }
    str[j] = '\0'; // 添加字符串结束符
}
int main() {
    char str[] = "  H e l l o   W o r l d!  ";
    remove_all_spaces(str);
    printf("去除所有空格后: %s\n", str); // 输出: HelloWorld!
    return 0;
}

方法2:去除前导和尾随空格(保留中间空格)

  1. 去除前导空格:找到第一个非空格字符的位置。
  2. 去除尾随空格:从字符串末尾向前跳过空格。
  3. 截断字符串:在新的结束位置添加 \0
#include <stdio.h>
#include <string.h>
void trim_spaces(char *str) {
    int start = 0, end = strlen(str) - 1;
    // 去除前导空格
    while (str[start] == ' ') {
        start++;
    }
    // 去除尾随空格
    while (end >= start && str[end] == ' ') {
        end--;
    }
    // 截断字符串
    str[end + 1] = '\0';
    // 如果前导空格存在,前移字符串
    if (start > 0) {
        memmove(str, str + start, end - start + 1);
        str[end - start + 1] = '\0';
    }
}
int main() {
    char str[] = "   Hello   World!   ";
    trim_spaces(str);
    printf("去除首尾空格后: %s\n", str); // 输出: Hello   World!
    return 0;
}

方法3:原地去除中间连续空格(保留单个空格)

适用于需要压缩连续空格为单个空格的情况(如处理用户输入)。

#include <stdio.h>
#include <string.h>
void remove_extra_spaces(char *str) {
    int i = 0, j = 0;
    int space_flag = 0; // 标记前一个字符是否为空格
    while (str[i]) {
        if (str[i] != ' ') {
            str[j++] = str[i];
            space_flag = 0;
        } else if (!space_flag) {
            // 如果当前是空格且前一个不是空格,则保留一个空格
            str[j++] = ' ';
            space_flag = 1;
        }
        i++;
    }
    str[j] = '\0';
}
int main() {
    char str[] = "   Hello    World!   ";
    remove_extra_spaces(str);
    printf("压缩连续空格后: %s\n", str); // 输出: Hello World!
    return 0;
}

方法 功能 适用场景
方法1 去除所有空格 需要完全无空格的字符串(如处理编码)
方法2 去除首尾空格 清理用户输入(如命令行参数)
方法3 压缩连续空格 格式化文本(如处理自然语言)

根据需求选择合适的方法,注意字符串的内存边界(确保不会越界)。

-- 展开阅读全文 --
头像
dede仿图片站如何搭建?
« 上一篇 前天
如何调取指定栏目内容织建专属梦境?
下一篇 » 前天

相关文章

取消
微信二维码
支付宝二维码

目录[+]