C++ 将字符附加到字符串

C++ 将字符附加到字符串,c++,string,char,C++,String,Char,我有两个字符,我想创建一个字符串来连接它们: char a = '1'; char b = '2'; string s = "(" + a + "," + b + ")"; 最简单的方法是什么? 由于第一个元素是一个字符串,通过从左到右连接元素,它应该可以工作,因为每个字符将被转换成一个字符串并追加 然而,编译器似乎不喜欢它 error: invalid operands of types 'const char*' and 'const char [2]' to binary 'opera

我有两个字符,我想创建一个字符串来连接它们:

char a = '1';
char b = '2';

string s = "(" + a + "," + b + ")";
最简单的方法是什么? 由于第一个元素是一个字符串,通过从左到右连接元素,它应该可以工作,因为每个字符将被转换成一个字符串并追加

然而,编译器似乎不喜欢它

error: invalid operands of types 'const char*' and 'const char [2]' to binary 'operator+'
如何实现这一点?

不是std::string。它是一个char[2]C字符串数组。使用以下命令将其设置为std::string:

如果您尝试执行以下操作,仍可能失败:

std::string s = a + b + "."s; // error
在这种情况下,只需从空字符串开始:

std::string s = ""s + a + b + "."s;
另一个选项是用于构建字符串:

std::ostringstream oss;
oss << "(" << a << "," << b << ")";
std::string s3 = oss.str();
你可以直接写

char a = '1';
char b = '2';

std::string s = std::string( "(" ) + a + "," + b + ")";

这是一个演示程序

#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;
}
#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;
}
或者你可以使用像这样的构造函数

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 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;
}
#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;
}

从技术上讲,内置文字是否算作用户定义文字?据我所知,作为初学者,UDL后缀必须以a开头。我不知道s文字,谢谢!我喜欢这个解决方案,因为它紧凑、清晰,并且不需要额外的复杂行。由于在+a中,a被转换为int,而add给出了一个指针,所以会出现特定的错误。然后你试着把它添加进去,我喜欢像这样的东西的stringstream:std::ostringstream strm;strm for循环可以替换为对的单个调用: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)