Как объединить строки с символами в C ++? - PullRequest
1 голос
/ 18 апреля 2020

У меня есть функция, которая принимает строку, давайте назовем ее

void print(std::string myString) 
{ 
    std::cout << myString;
}

Я хочу сделать что-то вроде

char myChar;
myChar = '{';
print("Error, unexpected char: " + myChar + "\n");

Это не работает.

Я пробовал что-то вроде

print(std::string("Error, unexpected char") + std::string(myChar) + std::string("\n) )

, но затем std :: string (myChar) становится тем, что представляет собой тип char, оно печатается как int и не печатается как alphanumeri c представление!

Ответы [ 3 ]

2 голосов
/ 18 апреля 2020

Если вы используете C ++ 14, вы можете сделать это:

using namespace std::literals;
char myChar;
myChar = '{';
print("Error, unexpected char: "s + myChar + "\n"s);
2 голосов
/ 18 апреля 2020

Функция должна быть объявлена ​​как

void print( const std::string &myString) 
{ 
    std::cout << myString;
}

и названа как

print( std::string( "Error, unexpected char: " ) + myChar + "\n");

Что касается вашего комментария

как продолжение, не так ли? Можно было передать анонимную функцию, возвращающую строку в качестве аргумента для print ()? Что-то вроде print ({return "hello world";}

, тогда вы можете сделать это так, как показано в демонстрационной программе.

#include <iostream>
#include <string>

void f( std::string h() )
{
    std::cout << h() << '\n';
}

int main() 
{
    f( []()->std::string { return "Hello World!"; } );

    return 0;
}
1 голос
/ 18 апреля 2020

Вы можете преобразовать любой и конкатат.

Вы можете использовать str.c_str() для преобразования строки C ++ в C массив символов.

Или

Использовать std: : встроенный конструктор строки для преобразования массива символов C в строку C ++.

...