【问题标题】:Concatenate plain char and string?连接普通字符和字符串?
【发布时间】:2021-08-10 09:17:06
【问题描述】:

我被这个看似简单的问题完全搞糊涂了。

我有一个痛苦的旧字符,我想将它连接到一个字符串的中间。 像这样。

string missingOptionArg(char missingArg) {
     return "Option -" + missingArg + " requires an operand";
}

我猜 + 操作数足够聪明,可以处理这种琐碎的事情,如果不是,那么最简单的方法是什么?

【问题讨论】:

  • return string("Option -") + missingArg + " requires an operand";
  • 酷,这似乎可行,但我不明白的是我认为“Option -”已经是一个字符串,为什么我们要用“string()”将它转换为一个字符串?跨度>
  • "Option -" 是 char[9] 而不是 std::string 和其他字符串文字类似。像这样的原始类型不会自动产生复杂类型。这就是创建这种语言的方式的遗产。

标签: c++ string char concatenation


【解决方案1】:

连接字符串文字和字符:

std::string miString = std::string("something") + c;

当您需要连接两个字符串字面量时,也会发生类似的情况。

注意"something" 不是std::string,它是一个指向字符数组的指针。然后你不能使用 + 连接两个字符串文字,那将添加两个指针,这不是你想要的。

您的代码的更正在 Igor 的评论中。

【讨论】:

    【解决方案2】:

    接受的答案是实现串联的最简单但其他方式。

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    string missingOptionArgRet(char missingArg) {
    
         string s("Option -");
         s += missingArg;
         s += " requires an operand";
         return s;
    }
    
    void missingOptionArgOut(char missingArg, std::string* out) {
    
         *out = "Option -";
         *out += missingArg;
         *out += " requires an operand";
    }
    
    main(int, char**)
    {
        string s1 = missingOptionArgRet('x');
        string s2;
    
        missingOptionArgOut('x', &s2);
    
        cout << "s1 = " << s1 << '\n';
        cout << "s2 = " << s2 << '\n';
    }
    

    使用+= 而不是+ 将阻止临时字符串对象。还有2个选项。按值返回missingOptionArgRet。这有一个缺点,即作为按值返回的结果,必须将字符串复制到调用者。

    第二个选项missingOptionArgOut 可以以稍微冗长的代码为代价来防止这种情况。我传入了一个已经构造好的string(通过指针明确它是一个要修改的变量,但可以通过引用传递)。

    【讨论】:

    • aaaah,这可以进一步详细说明问题,谢谢。
    猜你喜欢
    • 2021-12-17
    • 1970-01-01
    • 2014-03-29
    • 2023-03-27
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多