добавить символы в строку - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть два символа, и я хочу создать строку, объединяющую их:

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

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

Какой самый простой способ добиться этого? Поскольку первый элемент "(" является строкой, объединяя элементы слева направо, он должен работать, поскольку каждый символ будет приведен к строке и добавлен.

Однако компилятору, похоже, не нравится это.

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

Как мне этого добиться?

Ответы [ 2 ]

6 голосов
/ 23 апреля 2020

"(" не является 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 голосов
/ 23 апреля 2020

Вы можете просто написать

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...