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

在C++中实现支持两种调用行为的字符串工具函数

在C++中实现支持两种调用行为的字符串工具函数

嘿,我来聊聊怎么实现你想要的这种字符串工具函数~你希望工具类的每个操作都给用户两个选择:要么生成一个处理后的新字符串返回,要么直接修改用户传入的原字符串,对吧?

先明确下你的核心需求:

  • 创建并返回应用了操作的新字符串
  • 原地更新现有字符串

你提到用函数重载来实现,这其实是个挺直观且符合C++风格的方案,我给你补全一下示例代码,方便你参考:

#include <algorithm>
#include <string>

struct String final {
    // 版本1:返回处理后的新字符串,输入是const引用保证原字符串不被修改
    static std::string toUpperCase(const std::string& input) {
        std::string result = input;
        std::transform(result.begin(), result.end(), result.begin(), ::toupper);
        return result;
    }

    // 版本2:原地修改输入字符串,输入是非const引用
    static void toUpperCase(std::string& input) {
        std::transform(input.begin(), input.end(), input.begin(), ::toupper);
    }
};

使用的时候也很简单,用户可以根据自己的需求选对应的调用方式:

// 方式1:获取新字符串,原字符串不变
std::string original = "hello";
std::string upperStr = String::toUpperCase(original);

// 方式2:原地修改原字符串
String::toUpperCase(original);

这种重载方案的好处在于:

  • 调用逻辑清晰,用户不用记两个不同的函数名(比如toUpperCase和toUpperCaseInPlace),编译器会根据传入的参数类型自动匹配对应的重载
  • 遵循C++的const正确性原则,const引用的版本明确表示不会修改原字符串,非const引用的版本则明确允许修改

如果要扩展其他字符串操作(比如转小写、去除首尾空格等),都可以套用这个模式,只需要实现对应的两个重载版本就行。

备注:内容来源于stack exchange,提问作者Qwe Qwe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 16:58:17