将一个char类型字符添加到string的尾部的方法---C++

Posted KookNut39

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将一个char类型字符添加到string的尾部的方法---C++相关的知识,希望对你有一定的参考价值。

文章目录

1. += 简单粗暴的方法

	std::string s("hello");
	const char c = 'N';//将要加到s后面的字符
	s += c;
	std::cout << s << std::endl;

	return 0;

在string内部对于+=这个操作符是重新写了的,如下, push_back其实就是往尾部增加一个字符,那这样看来,直接调用push_back岂不是更高效?

_CONSTEXPR20 basic_string& operator+=(_Elem _Ch) 
        push_back(_Ch);
        return *this;
    

2. string内置方法push_back

	std::string s("hello");
	const char c = 'N';//将要加到s后面的字符
	//s += c;
	s.push_back(c);
	std::cout << s << std::endl;

我们来看看push_back内部是如何实现的:

 _CONSTEXPR20 void push_back(const _Elem _Ch)  // insert element at end
        const size_type _Old_size = _Mypair._Myval2._Mysize;
        if (_Old_size < _Mypair._Myval2._Myres) 
            _Mypair._Myval2._Mysize = _Old_size + 1;
            _Elem* const _Ptr       = _Mypair._Myval2._Myptr();
            _Traits::assign(_Ptr[_Old_size], _Ch);
            _Traits::assign(_Ptr[_Old_size + 1], _Elem());
            return;
        

        _Reallocate_grow_by(
            1,
            [](_Elem* const _New_ptr, const _Elem* const _Old_ptr, const size_type _Old_size, const _Elem _Ch) 
                _Traits::copy(_New_ptr, _Old_ptr, _Old_size);
                _Traits::assign(_New_ptr[_Old_size], _Ch);
                _Traits::assign(_New_ptr[_Old_size + 1], _Elem());
            ,
            _Ch);
    

3. string内置方法insert

std::string s("hello");
	const char c = 'N';//将要加到s后面的字符
	//s += c;
	//s.push_back(c);
	s.insert(s.length(), 1, c);
	std::cout << s << std::endl;

以上这段代码的意思,就是往string的尾部,插入一个字符c,insert三参数。

4. string内置方法append

std::string s("hello");
	const char c = 'N';//将要加到s后面的字符
	//s += c;
	//s.push_back(c);
	//s.insert(s.length(), 1, c);
	s.append(1, c);
	std::cout << s << std::endl;

那么看看append是如何实现的,和push_back有啥区别,其实仔细阅读两段代码是非常相似的,只是把append中的参数count替换成1,就是push_back的实现了

 _CONSTEXPR20 basic_string& append(_CRT_GUARDOVERFLOW const size_type _Count, const _Elem _Ch) 
        // append _Count * _Ch
        const size_type _Old_size = _Mypair._Myval2._Mysize;
        if (_Count <= _Mypair._Myval2._Myres - _Old_size) 
            _Mypair._Myval2._Mysize = _Old_size + _Count;
            _Elem* const _Old_ptr   = _Mypair._Myval2._Myptr();
            _Traits::assign(_Old_ptr + _Old_size, _Count, _Ch);
            _Traits::assign(_Old_ptr[_Old_size + _Count], _Elem());
            return *this;
        

        return _Reallocate_grow_by(
            _Count,
            [](_Elem* const _New_ptr, const _Elem* const _Old_ptr, const size_type _Old_size, const size_type _Count,
                const _Elem _Ch) 
                _Traits::copy(_New_ptr, _Old_ptr, _Old_size);
                _Traits::assign(_New_ptr + _Old_size, _Count, _Ch);
                _Traits::assign(_New_ptr[_Old_size + _Count], _Elem());
            ,
            _Count, _Ch);
    

5. 使用流的方式来操作,方式稍微有点怪,但也不难理解

#include <iostream>
#include <sstream>
int main() 
	std::string s("hello");
	const char c = 'N';//将要加到s后面的字符
	//s += c;
	//s.push_back(c);
	//s.insert(s.length(), 1, c);
	//s.append(1, c);
	std::stringstream ts;
	ts << s << c;//将字符串s和字符c输入到临时字符串流ts中
	ts >> s;//ts将自己内部保存的值,反吐给s
	std::cout << s << std::endl;

	return 0;

“美言可以市尊,美行可以加人。”—《道德经》(第六十二章)

以上是关于将一个char类型字符添加到string的尾部的方法---C++的主要内容,如果未能解决你的问题,请参考以下文章

将一个char类型字符添加到string的尾部的方法---C++

将一个char类型字符添加到string的尾部的方法---C++

把字符串前面的若干个字符移动到字符串的尾部 如把字符串“abcdef”变成字符串“cdefab”

[Algorithm] Reverse String II

字符串拼接大全

C# Enum,Int,String的互相转换 枚举转换