Следующее не удается с ошибкой prog.cpp:5:13: error: invalid conversion from ‘char’ to ‘const char*’
int main()
{
char d = 'd';
std::string y("Hello worl");
y.append(d); // Line 5 - this fails
std::cout << y;
return 0;
}
Я также попробовал следующее, которое компилируется, но ведет себя случайным образом во время выполнения:
int main()
{
char d[1] = { 'd' };
std::string y("Hello worl");
y.append(d);
std::cout << y;
return 0;
}
Извините за этот тупой вопрос, но я искал в Google, что я мог видеть, это просто "char array to char ptr", "char ptr to char array" и т. Д.
Ответы:
Я бы использовал
+=
оператор вместо именованных функций.источник
gcc
,basic_string::operator+=
это просто вызов вpush_back
.y
этоchar*
вместоstd::string
. Это добавитd
символы к указателю y.Используйте
push_back()
:источник
Чтобы добавить символ в переменную std :: string, используя метод append, вам нужно использовать эту перегрузку:
Изменить: Вы правы, я неправильно понял параметр size_type, отображаемый в контекстной справке. Это количество символов для добавления. Таким образом, правильный вызов
не
Или самый простой способ:
источник
sizeof(char)
вместо1
? Вы хотите добавить ровно одно повторениеd
, так что просто скажите это. Использованиеsizeof
здесь вводит в заблуждение, поскольку предполагает, что нужно указатьappend
размер байта используемого типа данных (что не так).В дополнение к другим упоминается, один из строковых конструкторов принимает символ и количество повторений для этого символа. Таким образом, вы можете использовать это, чтобы добавить один символ.
источник
Я проверил несколько предложений, запустив их в большой цикл. Я использовал Microsoft Visual Studio 2015 в качестве компилятора, и мой процессор i7, 8 Гц, 2 ГГц.
Согласно этому тесту, результаты таковы:
Вывод
+=
кажется более понятным, но если вы думаете о скорости, используйте команду appendисточник
Попробуйте оператор + = текст ссылки , Append () метод текст ссылки , или push_back () метод текстовую ссылку
Ссылки в этом посте также содержат примеры использования соответствующих API.
источник
проблема с:
в том, что вы должны иметь 'd', а не использовать имя символа, например char d = 'd'; Или я не прав?
источник
char c = 'd'
и я могу обойтисьy.push_back(c)
без проблем. Таким образом, нет проблем сstd::string::push_back()
(кроме того, что это дольше, чем+=
).Обратите внимание , что во всех этих примерах вы могли бы использовать буквенный символ непосредственно:
y += 'd';
.Ваш второй пример почти сработал бы по несвязанным причинам.
char d[1] = { 'd'};
не работает, ноchar d[2] = { 'd'};
(примечание массив размер два) были бы работали примерно такие же , какconst char* d = "d";
и строковый литерал может быть добавлен:y.append(d);
.источник
Попробуйте использовать d в качестве указателя y.append (* d)
источник
char
является строкой и не имеет нулевого терминатора. Это вызывает неопределенное поведение.*d
означает указатель де-ссылки,d
который является синтаксической ошибкой, посколькуd
не является указателем.Обратите внимание, что я написал 10u, а не 10, сколько раз я хотел бы добавить символ; замените 10 на любое число.
источник
Я нашел простой способ ... Мне нужно было привязать
char
к струне, которая строилась на лету. Мне нужно было,char list;
потому что я предоставлял пользователю выбор и использовал этот выбор вswitch()
утверждении.Я просто добавил еще одну
std::string Slist;
и установил новую строку равной символу «список» - a, b, c или тому, что конечный пользователь выбрал следующим образом:Сложность может быть крутой, но простота круче. по моему мнению
источник
Также добавлена опция вставки, как еще не упомянуто.
источник
Если вы используете push_back, для строкового конструктора нет вызова. В противном случае он создаст строковый объект посредством приведения, затем он добавит символ в этой строке к другой строке. Слишком много проблем для крошечного персонажа;)
источник