【问题标题】:return char1 + char2? Isn't it possible?返回 char1 + char2?不可能吗?
【发布时间】:2010-03-30 04:38:30
【问题描述】:

我正在尝试从函数返回一个字符串。这基本上将一些字符添加在一起并返回字符串表示形式。

string toString() {
   char c1, c2, c3;
   // some code here
   return c1 + c2; // Error: invalid conversion from `char' to `const char*'
}

可以返回布尔值,例如 return c1 == 'x'。不能返回字符串值吗?我知道可以这样:

string result;
result.append(c1, c2);
return result;

我是 C++ 新手,所以我认为必须有更优雅的解决方案。

【问题讨论】:

  • jeffamaphone、AndreyT、Justin Ardini、Matthew Flaschen,谢谢你们!

标签: c++ string char


【解决方案1】:

不,你不能这样做,因为将两个字符加在一起不会给你一个字符串。它给了你另一个字符;在这种情况下,'a'+'b' 实际上给了你'├'(在Windows 上使用标准CP_ACP 代码页)。 Char 是一种序数类型,就像整数一样,编译器只知道如何以最基本的方式添加它们。弦乐是完全不同的野兽。

你可以做到,但你必须明确:

return string(1, c1) + string(1, c2)

这将构造两个临时字符串,每个都初始化为作为第二个参数传递的字符的一个重复。由于 operator+ 是为字符串定义的连接函数,因此您现在可以为所欲为。

【讨论】:

  • 非常感谢您的回答和解释。这是最常见的方法吗?我的意思是,如果你要写一个这样的函数,你会用这种方式吗?
  • 因为std::stringchar 定义了operator+,你也可以这样做:return std::string() + c1 + c2;
  • Pocoa,既然你要求一种“优雅”的方式,我会继续提出stackoverflow.com/questions/469696/… - 它肯定是最优雅的,因为它适用于任何可流式传输的类型,而不仅仅是 char。如果你不喜欢它的语法,你也可以用至少两种方式来简化它。这是我用的。我也喜欢 UncleBens 的解决方案,尽管它不适用于任意可流式传输的类型。
  • 是的,第一个就足够了。谢谢,他们都很有帮助。
  • 不,我不会这样做。目前尚不清楚您实际上在做什么,但我会尝试始终使用字符串或 char 和 char*,而不是将两者混合。无论如何,这实际上不是 size_t, char 构造函数的用途。
【解决方案2】:

char C++(以及 C)中的类型是整型。它们表现为整数类型。就像您在代码中编写 5 + 3 时一样,您希望得到整数 8 作为结果(而不是字符串 "53"),当您在上面的代码中编写 c1 + c2 时,您应该期望得到整数结果- c1c2的算术和。

如果你真的想连接两个字符形成一个字符串,你必须以不同的方式来做。有很多方法可以做到这一点。例如,你可以形成一个 C 风格的字符串

char str[] = { c1, c2, `\0` };

这将被隐式转换为std::string

return str;

或者您可以立即构建std::string(也可以通过多种不同方式完成)。

【讨论】:

    【解决方案3】:

    您可以将每个字符转换为字符串,然后使用 +:

    return string(1, c1)+string(1, c2);
    

    或者,字符串有 + 运算符重载来处理字符,所以你可以这样写:

    return string(1, c1) + c2;
    

    无论您选择哪种方法,您都需要将整数类型 char 转换为 C 样式字符串 (char*) 或 C++ 样式字符串 (std::string)。

    【讨论】:

      【解决方案4】:
      return string(1, c1) + c2;
      

      这会构造一个包含 c1 的 1 字符字符串,然后添加(重载以连接)c2(创建另一个字符串),然后返回它。

      【讨论】:

        【解决方案5】:

        不,他们只是将字符代码相加。您需要将它们转换为字符串。

        【讨论】:

          【解决方案6】:

          您需要从字符创建一个字符串。
          然后返回字符串(实际上是字符串的副本)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-03-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-08-14
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多