如何将多个字符串相加,例如“123”+“456”?
How to add several string together such as "123"+"456"?
如何实现这样的操作,Visual Studio老是告诉我不对
错误代码是 C2110
和 E2140
.
有人可以帮忙吗?
std::string a = "2323" + "22323" + "232332";
const char[X]
没有预定义的 operator+
(char 的常量数组,X 是其中的字符数;例如 const char[5]
是文字类型 "2323"
就像在你的代码中一样) - 也不是 const char *
,它们可以自动转换成。这就是 C++ 编译器不允许您这样做的原因。
但是,有一个operator+
for std::string
。由于此运算符又 returns 一个字符串,因此您可以链式调用,即对其结果再次调用 + 运算符。
所以你可以这样写:
std::string a = std::string("2323") + "22323" + "232332";
如果您已经在使用 C++14 或更高版本,您可以通过 s
后缀使用字符串类型的文字,那么另一种写法是
using namespace std::string_literals;
std::string a = "2323"s + "22323" + "232332";
如果只是多个const char[X]
字面量要拼接,也可以一个接一个写,像这样:
std::string a("2323" "22323" "232332");
// or:
std::string a = "2323" "22323" "232332";
编译器会自动为您连接它们。
在此声明中
std::string a="2323" + "22323" + "232332";
您正在使用带有字符串文字和运算符 + 的表达式,它不是为字符数组定义的,也不是相应地为字符串文字隐式转换到的指针定义的。
你可以这样写
std::string a = "2323"s + "22323" + "232332";
使用用户定义的字符串文字 "2323"s
或者你可以写
std::string a = std::string( "2323" ) + "22323" + "232332";
另一种方法是声明对象a
like
std::string a;
然后写
a += "2323";
a += "22323";
a += "232332";
这是一个演示程序。
#include <iostream>
#include <string>
int main()
{
{
using namespace std::literals;
std::string a = "2323"s + "22323" + "232332";
std::cout << a << '\n';
}
{
std::string a = std::string( "2323" ) + "22323" + "232332";
std::cout << a << '\n';
}
{
std::string a;
a += "2323";
a += "22323";
a += "232332";
std::cout << a << '\n';
}
return 0;
}
程序输出为
232322323232332
232322323232332
232322323232332
表达式 "2323"
不是 std::string
,它是 const char[5]
。
自 C++14 起,您 可以 具有 std::string
:
类型的文字
using namespace std::string_literals;
std::string a = "2323"s + "22323"s + "232332"s;
除了提供的其他答案外,您还可以使用 std::stringstream
构建 std::string
。
#include <sstream>
int main( )
{
std::stringstream ss{ };
ss << "2323" << "22323" << "232332";
// Maybe you also want to conditionally append something else.
if ( some_condition )
{
// Note that I'm inserting an integer here.
ss << 42;
}
// When you're ready you can call the str( ) member function
// to attain a copy of the underlying string.
std::string s{ ss.str( ) };
}
如何实现这样的操作,Visual Studio老是告诉我不对
错误代码是 C2110
和 E2140
.
有人可以帮忙吗?
std::string a = "2323" + "22323" + "232332";
const char[X]
没有预定义的 operator+
(char 的常量数组,X 是其中的字符数;例如 const char[5]
是文字类型 "2323"
就像在你的代码中一样) - 也不是 const char *
,它们可以自动转换成。这就是 C++ 编译器不允许您这样做的原因。
但是,有一个operator+
for std::string
。由于此运算符又 returns 一个字符串,因此您可以链式调用,即对其结果再次调用 + 运算符。
所以你可以这样写:
std::string a = std::string("2323") + "22323" + "232332";
如果您已经在使用 C++14 或更高版本,您可以通过 s
后缀使用字符串类型的文字,那么另一种写法是
using namespace std::string_literals;
std::string a = "2323"s + "22323" + "232332";
如果只是多个const char[X]
字面量要拼接,也可以一个接一个写,像这样:
std::string a("2323" "22323" "232332");
// or:
std::string a = "2323" "22323" "232332";
编译器会自动为您连接它们。
在此声明中
std::string a="2323" + "22323" + "232332";
您正在使用带有字符串文字和运算符 + 的表达式,它不是为字符数组定义的,也不是相应地为字符串文字隐式转换到的指针定义的。
你可以这样写
std::string a = "2323"s + "22323" + "232332";
使用用户定义的字符串文字 "2323"s
或者你可以写
std::string a = std::string( "2323" ) + "22323" + "232332";
另一种方法是声明对象a
like
std::string a;
然后写
a += "2323";
a += "22323";
a += "232332";
这是一个演示程序。
#include <iostream>
#include <string>
int main()
{
{
using namespace std::literals;
std::string a = "2323"s + "22323" + "232332";
std::cout << a << '\n';
}
{
std::string a = std::string( "2323" ) + "22323" + "232332";
std::cout << a << '\n';
}
{
std::string a;
a += "2323";
a += "22323";
a += "232332";
std::cout << a << '\n';
}
return 0;
}
程序输出为
232322323232332
232322323232332
232322323232332
表达式 "2323"
不是 std::string
,它是 const char[5]
。
自 C++14 起,您 可以 具有 std::string
:
using namespace std::string_literals;
std::string a = "2323"s + "22323"s + "232332"s;
除了提供的其他答案外,您还可以使用 std::stringstream
构建 std::string
。
#include <sstream>
int main( )
{
std::stringstream ss{ };
ss << "2323" << "22323" << "232332";
// Maybe you also want to conditionally append something else.
if ( some_condition )
{
// Note that I'm inserting an integer here.
ss << 42;
}
// When you're ready you can call the str( ) member function
// to attain a copy of the underlying string.
std::string s{ ss.str( ) };
}