C++ 17 字符串填充函数(PaddingLeft、PaddingRight)填充左侧、右侧。

C++ 17 模版约束

cpp 复制代码
    template <typename T, typename = void>
    struct is_string : std::false_type 
    {
        using value_type = T;
    };

    template <typename T>
    struct is_string<T, 
        std::void_t<
            typename T::value_type,
            typename T::traits_type,
            typename T::allocator_type
        >
    > : std::is_same<
        T,
        std::basic_string<
            typename T::value_type,
            typename T::traits_type,
            typename T::allocator_type
        >
    > 
    {
        using value_type = T;
    };

    // 约束包装器
    template <typename T>
    using if_string = std::enable_if_t<is_string<T>::value, T>;

C++ 模版实现(HPP)

cpp 复制代码
    /// @brief 根据字符串的对齐长度来决定是否需要字符串左侧填充字符
    /// @tparam _Ty 字符串类型
    /// @param s 字符串
    /// @param count 对齐数量
    /// @param padding_char 对齐字符
    /// @return 返回对齐好之后的完整字符串
    template <typename _Ty, typename = stl::if_string<_Ty>>
    _Ty                                                                     PaddingLeft(const _Ty& s, size_t count, typename _Ty::value_type padding_char) noexcept
    {
        size_t str_len = s.size();
        if (count == 0 || count <= str_len) 
        {
            return s;
        }

        // 构造填充字符 + 原字符串
        _Ty result;
        result.reserve(count);

        // 添加填充字符
        result.append(count - str_len, padding_char);

        // 添加原字符串
        result.append(s);
        return result;
    }

    /// @brief 根据字符串的对齐长度来决定是否需要字符串右侧填充字符
    /// @tparam _Ty 字符串类型
    /// @param s 字符串
    /// @param count 对齐数量
    /// @param padding_char 对齐字符
    /// @return 返回对齐好之后的完整字符串
    template <typename _Ty, typename = stl::if_string<_Ty>>
    _Ty                                                                     PaddingRight(const _Ty& s, size_t count, typename _Ty::value_type padding_char) noexcept
    {
        // 构造原字符串 + 填充字符
        _Ty result = s;
        if (count > result.size()) 
        {
            result.resize(count, padding_char);  // 直接在末尾填充
        }

        return result;
    }
相关推荐
明洞日记15 小时前
【VTK手册036】网格拓扑简化工具:vtkCleanPolyData 使用指南
c++·图像处理·ai·vtk·图形渲染
wakaka_Yu15 小时前
COLMAP 3.13.0 + CUDA 12.9 + Ubuntu24.04 编译
c++
范纹杉想快点毕业15 小时前
欧几里得算法与扩展欧几里得算法,C语言编程实现(零基础全解析)
运维·c语言·单片机·嵌入式硬件·算法
f***241115 小时前
Bug悬案:技术侦探的破案指南
算法·bug
Swift社区15 小时前
LeetCode 472 连接词
算法·leetcode·职场和发展
Dream it possible!15 小时前
LeetCode 面试经典 150_二分查找_搜索旋转排序数组(114_33_C++_中等)
c++·leetcode·面试
CoovallyAIHub15 小时前
YOLO-Maste开源:首个MoE加速加速实时检测,推理提速17.8%!
深度学习·算法·计算机视觉
清铎15 小时前
leetcode_day13_普通数组_《绝境求生》
数据结构·算法
_OP_CHEN15 小时前
【从零开始的Qt开发指南】(二十)Qt 多线程深度实战指南:从基础 API 到线程安全,带你实现高效并发应用
开发语言·c++·qt·安全·线程·前端开发·线程安全
hetao173383715 小时前
2026-01-09~12 hetao1733837 的刷题笔记
c++·笔记·算法