Как добавить символ в std :: string?

Ниже приводится ошибка с ошибкой 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» и т. Д.

 y += d; 

Я использовал бы оператор += вместо названных функций.

Используйте push_back() :

 std::string y("Hello worl"); y.push_back('d') std::cout << y; 

Чтобы добавить char в std :: string var с помощью метода append, вам нужно использовать эту перегрузку:

 std::string::append(size_type _Count, char _Ch) 

Изменить. Правильно. Я неправильно понял параметр size_type, отображаемый в контекстной справке. Это количество добавляемых символов. Таким образом, правильный вызов

 s.append(1, d); 

не

 s.append(sizeof(char), d); 

Или самый простой способ:

 s += d; 

В дополнение к другим упомянутым, один из конструкторов строк принимает символ и количество повторений для этого символа. Таким образом, вы можете использовать это, чтобы добавить один символ.

 std::string s = "hell"; s += std::string(1, 'o'); 

Я тестирую несколько предложений, запустив их в большой цикл. Я использовал microsoft visual studio 2015 в качестве компилятора, а мой процессор – i7, 8Hz, 2GHz.

  long start = clock(); int a = 0; //100000000 std::string ret; for (int i = 0; i < 60000000; i++) { ret.append(1, ' '); //ret += ' '; //ret.push_back(' '); //ret.insert(ret.end(), 1, ' '); //ret.resize(ret.size() + 1, ' '); } long stop = clock(); long test = stop - start; return 0; 

Согласно этому тесту, результаты:

  operation time(ms) note ------------------------------------------------------------------------ append 66015 += 67328 1.02 time slower than 'append' resize 83867 1.27 time slower than 'append' push_back & insert 90000 more than 1.36 time slower than 'append' 

Вывод

+= кажется более понятным, но если вы не уверены в скорости, используйте append

Попробуйте текст ссылки оператора +, текст ссылки метода append () или текст ссылки метода push_back ()

Ссылки в этом сообщении также содержат примеры того, как использовать соответствующие API.

проблема с:

 std::string y("Hello worl"); y.push_back('d') std::cout << y; 

заключается в том, что вы должны иметь «d», а не использовать имя char, например char d = 'd'; Или я ошибаюсь?

 int main() { char d = 'd'; std::string y("Hello worl"); y += d; y.push_back(d); y.append(1, d); //appending the character 1 time y.insert(y.end(), 1, d); //appending the character 1 time y.resize(y.size()+1, d); //appending the character 1 time y += std::string(1, d); //appending the character 1 time } 

Обратите внимание, что во всех этих примерах вы могли бы использовать литерал буква напрямую: y += 'd'; ,

Ваш второй пример почти сработал бы по несвязанным причинам. char d[1] = { 'd'}; не работает, но char d[2] = { 'd'}; (обратите внимание, что массив имеет размер два) будет работать примерно так же, как const char* d = "d"; , и может быть добавлен строковый литерал: y.append(d); ,

Попробуйте использовать d в качестве указателя y.append (* d)

 str.append(10u,'d'); //appends character d 10 times 

Заметьте, что я написал 10u, а не 10 для количества раз, когда я хотел бы добавить символ; замените 10 на любое количество.

Если вы используете push_back, вызов конструктора строк отсутствует. В противном случае он создаст строковый объект с помощью каста, затем добавит символ в эту строку к другой строке. Слишком много неприятностей для крошечного персонажа;)

Interesting Posts
Давайте будем гением компьютера.