You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C语言中去除字符串空格并生成精确长度无尾空格新数组

C语言字符串处理:创建匹配长度数组与去除空格方案

一、创建与去尾空格后长度一致的新数组

核心思路是先处理原字符串的末尾空格,再根据有效长度分配内存创建新数组,具体步骤如下:

  1. 读取并预处理输入:用fgets读取用户输入到原数组,先移除fgets自动读入的换行符。
  2. 截断末尾空格:从字符串末尾向前遍历,定位第一个非空格字符,将其后一位设为字符串终止符'\0',得到去除尾空格的有效字符串。
  3. 创建匹配长度的新数组:计算有效字符串长度,用malloc分配对应内存(需额外+1存储终止符),最后复制字符串到新数组。

示例代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() {
    char input[100];
    // 读取用户输入,避免超出数组边界
    fgets(input, sizeof(input), stdin);
    
    // 先移除末尾的换行符(如果存在)
    size_t len = strlen(input);
    if (len > 0 && input[len-1] == '\n') {
        input[len-1] = '\0';
        len--;
    }
    
    // 移除末尾所有空格
    while (len > 0 && input[len-1] == ' ') {
        len--;
    }
    input[len] = '\0'; // 截断到有效长度
    
    // 分配内存创建新数组
    char *new_arr = malloc(len + 1);
    if (new_arr == NULL) {
        perror("内存分配失败");
        return 1;
    }
    strcpy(new_arr, input);
    
    printf("处理后的字符串:'%s'\n", new_arr);
    printf("新数组实际长度:%zu\n", strlen(new_arr));
    
    free(new_arr); // 释放动态分配的内存
    return 0;
}

二、去除字符串中的所有空格

去除所有空格(含开头、中间、末尾)有两种常用实现方式:

方式1:原地修改(无需额外内存)

用双指针法,一个指针遍历原字符串,另一个指针仅写入非空格字符,最后补终止符。

示例代码:

#include <stdio.h>

void remove_all_spaces(char *str) {
    char *write_ptr = str;
    // 遍历每个字符
    for (char *read_ptr = str; *read_ptr != '\0'; read_ptr++) {
        if (*read_ptr != ' ') {
            *write_ptr++ = *read_ptr;
        }
    }
    *write_ptr = '\0'; // 终止处理后的字符串
}

int main() {
    char input[100] = "  Hello World!  ";
    remove_all_spaces(input);
    printf("去除所有空格后:'%s'\n", input); // 输出'HelloWorld!'
    return 0;
}

方式2:创建新数组(不修改原字符串)

先统计原字符串中非空格字符的数量,分配对应内存后,仅复制非空格字符到新数组。

示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *remove_all_spaces_new(const char *str) {
    // 统计非空格字符数
    size_t non_space_cnt = 0;
    for (const char *p = str; *p != '\0'; p++) {
        if (*p != ' ') {
            non_space_cnt++;
        }
    }
    
    // 分配内存
    char *new_str = malloc(non_space_cnt + 1);
    if (new_str == NULL) {
        return NULL;
    }
    
    // 复制非空格字符
    char *write_ptr = new_str;
    for (const char *read_ptr = str; *read_ptr != '\0'; read_ptr++) {
        if (*read_ptr != ' ') {
            *write_ptr++ = *read_ptr;
        }
    }
    *write_ptr = '\0';
    return new_str;
}

int main() {
    char input[100] = "  Hello World!  ";
    char *result = remove_all_spaces_new(input);
    if (result != NULL) {
        printf("去除所有空格后的新数组:'%s'\n", result);
        free(result); // 释放内存
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者Jacob Mohamed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 04:57:39