【问题标题】:How do I concatenate strings with chars in C++?如何在 C++ 中将字符串与字符连接起来?
【发布时间】:2020-07-31 23:40:33
【问题描述】:

我有一个接收字符串的函数,我们称之为

void print(std::string myString) 
{ 
    std::cout << myString;
}

我想做类似的事情

char myChar;
myChar = '{';
print("Error, unexpected char: " + myChar + "\n");

它不起作用。

我尝试了类似的东西

print(std::string("Error, unexpected char") + std::string(myChar) + std::string("\n) )

但是 std::string(myChar) 变成了 char 所代表的任何 int,它被打印为 int 而不是作为字母数字表示来打印!

【问题讨论】:

  • 你试过了吗:std::string("Error, unexpected char") + ch
  • std::string 没有将字符转换为数字的构造函数。您是否使用过std::to_string
  • @RobertAndrzejuk 我做了,但我想要换行符而不是把它放在我的打印功能中。另外,是的,我用过tostring忘记了抱歉
  • 如果... +ch+"\n" 不起作用,那么换行可以写成:"\n"s
  • @ShazamoMorebucks 它被打印为 int,而不是作为字母数字表示形式打印! -- 我很惊讶到目前为止还没有人真正解释过这个问题。您使用了错误的 std::string 构造函数。应该是std::string(1, myChar);

标签: c++ string char string-concatenation


【解决方案1】:

函数应该声明如下:

void print( const std::string &myString) 
{ 
    std::cout << myString;
}

并像这样称呼:

print( std::string( "Error, unexpected char: " ) + myChar + "\n");

至于你的评论:

作为跟进,是否可以通过匿名 函数返回一个字符串作为 print() 的参数?就像是 print({return "hello world";}

那么你就可以按照演示程序中的方式进行操作了:

#include <iostream>
#include <string>

void f( std::string h() )
{
    std::cout << h() << '\n';
}

int main() 
{
    f( []()->std::string { return "Hello World!"; } );
    
    return 0;
}

【讨论】:

  • 有效!看起来我做错了什么是将 print(std::string("Unexpected Character " + character) + '\n') 作为参数传递,我应该将文字和字符分开
  • 作为后续,是否可以将返回字符串的匿名函数作为参数传递给 print()?类似 print([](){return "hello world";})
  • @ShazamoMorebucks 你在这里 #include #include void f( std::string h() ) { std::cout std::string { return "Hello World!"; } );返回0; }
  • 谢谢!所以我每次都必须声明一个重载来接受一个 lambda?有没有办法默认自动接受任何参数的 lambda?
  • @ShazamoMorebucks 如果转换为函数的 lambda 表达式类型不同,则必须声明模板函数。
【解决方案2】:

如果你使用的是 C++14,你可以这样做:

using namespace std::literals;
char myChar;
myChar = '{';
print("Error, unexpected char: "s + myChar + "\n"s);

【讨论】:

  • 谢谢!我是 C++ 新手,所以不知道你可以制作字符串文字,以为你总是有 char 数组文字
【解决方案3】:

您可以转换任何一个并连接。

您可以使用str.c_str() 将C++ 字符串转换为C 字符数组。

或者

使用 std::string 内置构造函数将 C 字符数组转换为 C++ 字符串。

【讨论】:

    猜你喜欢
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多