追加字符

问题描述 投票:0回答:1

我有两个字符,我想把它们连接起来创建一个字符串,有什么最简单的方法?

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

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

有什么最简单的方法可以实现呢? 因为第一个元素"("是一个字符串, 通过从左到右的元素连接应该是可行的, 因为每一个字符都会被转换为一个字符串并被添加.

但是编译器似乎不喜欢这样。

error: invalid operands of types 'const char*' and 'const char [2]' to binary 'operator+'

我怎样才能实现这一点呢?

c++ string char
1个回答
6
投票

"(" 不是一个 std::string. 它是一个 char[2] C字符串数组。使之成为 std::string 借助 s 字面:

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();

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)
© www.soinside.com 2019 - 2024. All rights reserved.