C语言如何实现padleft左填充函数?

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

在C语言中,padleft 并不是一个内置函数,但我们可以根据其字面意思(左填充)来实现一个自定义函数。padleft 通常用于在字符串的左侧填充指定的字符,直到字符串达到指定的长度。

c语言 padleft
(图片来源网络,侵删)

实现思路

  1. 输入参数
    • str:原始字符串。
    • width:目标宽度(即填充后的字符串长度)。
    • pad_char:用于填充的字符。
  2. 逻辑
    • 如果原始字符串的长度已经大于或等于 width,则直接返回原字符串(或其拷贝)。
    • 否则,计算需要填充的字符数量(width - strlen(str)),并在字符串左侧填充这些字符。
  3. 返回值

    返回一个新的字符串(动态分配内存),调用者负责释放内存。

代码实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* padleft(const char* str, int width, char pad_char) {
    if (str == NULL) {
        return NULL;
    }
    size_t len = strlen(str);
    if (len >= width) {
        // 直接返回原字符串的拷贝(避免修改原字符串)
        char* result = malloc(len + 1);
        if (result == NULL) {
            return NULL;
        }
        strcpy(result, str);
        return result;
    }
    // 需要填充的情况
    char* result = malloc(width + 1); // +1 for null terminator
    if (result == NULL) {
        return NULL;
    }
    // 填充部分
    int pad_len = width - len;
    for (int i = 0; i < pad_len; i++) {
        result[i] = pad_char;
    }
    // 原始字符串部分
    strcpy(result + pad_len, str);
    return result;
}
int main() {
    const char* original = "hello";
    int width = 10;
    char pad_char = '0';
    char* padded = padleft(original, width, pad_char);
    if (padded != NULL) {
        printf("Original: \"%s\"\n", original);
        printf("Padded:   \"%s\"\n", padded);
        free(padded); // 释放动态分配的内存
    }
    return 0;
}

输出示例

Original: "hello"
Padded:   "00000hello"

关键点说明

  1. 内存管理
    • 使用 malloc 动态分配内存,调用者需要 free 释放。
    • 如果输入字符串为 NULL,直接返回 NULL
  2. 边界情况
    • width 小于等于字符串长度,返回原字符串的拷贝(不填充)。
    • 确保 result'\0'
  3. 可扩展性
    • 可以修改为原地填充(直接修改原字符串),但需要确保原字符串有足够空间(例如通过 strncat 实现)。

其他实现方式(原地填充)

如果允许修改原字符串,可以这样实现:

void padleft_inplace(char* str, int width, char pad_char) {
    if (str == NULL) {
        return;
    }
    size_t len = strlen(str);
    if (len >= width) {
        return;
    }
    int pad_len = width - len;
    memmove(str + pad_len, str, len + 1); // +1 to include null terminator
    memset(str, pad_char, pad_len);
}
int main() {
    char str[] = "hello";
    padleft_inplace(str, 10, '0');
    printf("Padded: \"%s\"\n", str); // 输出: "00000hello"
    return 0;
}

注意:这种方式会直接修改原字符串,且需要确保原字符串有足够空间(例如定义为 char str[20])。

c语言 padleft
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
c语言acoshf函数如何正确使用?
« 上一篇 04-22
unistd.h在C语言中到底扮演什么角色?
下一篇 » 04-22

相关文章

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