我有两个字符,我想创建一个将它们连接起来的字符串:
char a = '1';
char b = '2';
string s = "(" + a + "," + b + ")";
最简单的方法是什么? 由于第一个元素“(”是一个字符串,通过将元素从左到右进行串联,它应该可以工作,因为每个字符都将被转换为字符串并附加。
但是编译器似乎不喜欢它。
error: invalid operands of types 'const char*' and 'const char [2]' to binary 'operator+'
我该如何实现?
答案 0 :(得分:6)
"("
不是std::string
。它是一个char[2]
C字符串数组。使用s
literal将其设置为std::string
:
using namespace std::string_literals;
std::string s = "("s + a + ","s + b + ")"s;
如果您尝试执行以下操作,这仍然可能失败:
std::string s = a + b + "."s; // error
在这种情况下,您可以简单地从一个空字符串开始:
std::string s = ""s + a + b + "."s;
另一种选择是使用std::ostringstream
来构建字符串:
std::ostringstream oss;
oss << "(" << a << "," << b << ")";
std::string s3 = oss.str();
答案 1 :(得分:2)
你可以写
char a = '1';
char b = '2';
std::string s = std::string( "(" ) + a + "," + b + ")";
或
char a = '1';
char b = '2';
string s;
for ( char c : { '(', a, ',', b, ')' } )
{
s += c;
}
这是一个演示程序。
#include <iostream>
#include <string>
int main()
{
char a = '1';
char b = '2';
std::string s = std::string( "(" ) + a + "," + b + ")";
std::cout << "s = " << s << '\n';
std::string t;
for ( char c : { '(', a, ',', b, ')' } )
{
t += c;
}
std::cout << "t = " << t << '\n';
return 0;
}
程序输出为
s = (1,2)
t = (1,2)
或者您可以只使用类似的构造器
std::string s( { '(', a, ',', b, ')' } );
或方法分配
std::string s;
s.assign( { '(', a, ',', b, ')' } );
或追加
std::string s;
s.append( { '(', a, ',', b, ')' } );
这是另一个演示程序。
#include <iostream>
#include <string>
int main()
{
char a = '1';
char b = '2';
std::string s1( { '(', a, ',', b, ')' } );
std::cout << "s1 = " << s1 << '\n';
std::string s2;
s2.assign( { '(', a, ',', b, ')' } );
std::cout << "s2 = " << s2 << '\n';
std::string s3( "The pair is " );
s3.append( { '(', a, ',', b, ')' } );
std::cout << "s3 = " << s3 << '\n';
return 0;
}
其输出为
s1 = (1,2)
s2 = (1,2)
s3 = The pair is (1,2)