@著作权归作者所有:来自CSDN博客作者大胡子的艾娃的原创作品,如需转载,请注明出处https://blog.csdn.net/qq_43148810,否则将追究法律责任。 如有错误的地方欢迎指正,谢谢!
一、std::string的使用
STL知识点思维导图:https://download.csdn.net/download/qq_43148810/12133484
二、字符转换
1、string(多字符)和wstring(宽字符、Uniocde编码)都是模板类basic_string类的实例化
using string = basic_string<char, char_traits<char>, allocator<char>>;
using wstring = basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t>>;
using u16string = basic_string<char16_t, char_traits<char16_t>, allocator<char16_t>>;
using u32string = basic_string<char32_t, char_traits<char32_t>, allocator<char32_t>>;
2、字符串转整型或浮点型
int stoi(const string& _Str, size_t *_Idx = 0,int _Base = 10);
long stol(const string& _Str, size_t *_Idx = 0,int _Base = 10);
unsigned long stoul(const string& _Str, size_t *_Idx = 0,int _Base = 10);
long long stoll(const string& _Str, size_t *_Idx = 0,int _Base = 10);
float stof(const string& _Str, size_t *_Idx = 0);
double stod(const string& _Str, size_t *_Idx = 0);
long double stold(const string& _Str, size_t *_Idx = 0)
接口说明: 1)string和wstring两个重载版本版本 2)_Idx为返回有能够转换的有效字符数 3)_Base进制 4)_Str中允许有字符 5)_Str首字符开始解析,遇到无效字符终止 6)转换失败会抛出异常,应增加对其异常处理
boost中lexical_cast的实现
3、整型或浮点型转字符串
string to_string(int _Val);
string to_string(unsigned int _Val);
string to_string(long _Val);
string to_string(unsigned long _Val);
string to_string(long long _Val);
string to_string(unsigned long long _Val);
string to_string(float _Val);
string to_string(double _Val);
string to_string(long double _Val);
接口说明: string和wstring两个重载版本版本: wstring to_wstring(T _Val);
4、格式控制符拼组字符串
int sprintf_s(char* const _Buffer,size_t const _BufferCount,char const* const _Format,...);
接口说明: 1)_Buffer格式化字符后写入的首地址,应预先分配好内存大小的 2)_BufferCount应预先分配内存大小 3)_Format格式化字符 4)不定数量和类型的参数列… 5)return,_Buffer实际输出大小 6)应为浮点数精度不够时发生截取,四舍五入;因控制符输出精度发生截取,去尾巴法 7)其他格式控制符语法与C语言scanf()和printf()完全一致,请参考: C语言中的格式控制符
5、字符编码转换 1)ANSII编码单个字符占一个字节,中文用两个字节表示 2)Uniocde编码单个字符占两个字节,可容纳65536个字符,可容纳全世界现存所有字符 3)ANSII编码无法满足其他语言编码要求才产生了各类编码,推荐Uniocde编码,单个字符所占用内存一致 4)windowsAPI中对TCHAR和TBYTE的预处理语法 源码示例:
#include <windows.h>
#ifdef UNICODE
#ifndef _TCHAR_DEFINED
typedef WCHAR TCHAR, *PTCHAR;
typedef WCHAR TBYTE , *PTBYTE ;
#define _TCHAR_DEFINED
#endif
#else
#ifndef _TCHAR_DEFINED
typedef char TCHAR, *PTCHAR;
typedef unsigned char TBYTE , *PTBYTE ;
#define _TCHAR_DEFINED
#endif
5)多字符转宽字符
wchar_t* charToWchar_t(const std::string& pChar)
{
size_t leng = pChar.length() + 1;
wchar_t* WStr = (wchar_t*)malloc(leng * sizeof(wchar_t));
size_t converted = 0;
mbstowcs_s(&converted, WStr, leng, pChar.c_str(), _TRUNCATE);
return WStr;
}
6)宽字符转多字符
char* wchar_tTochar(const std::wstring& pWChar)
{
size_t leng = pWChar.length() + 1;
size_t converted = 0;
char* pChar = (char*)malloc(leng * sizeof(char));
wcstombs_s(&converted, pChar, leng, pWChar.c_str(), _TRUNCATE);
return pChar;
}
三.str::string的内存分布
深入理解C++中std::String的内存布局
四.Copy On Write写时拷贝技术
Copy On Write写时拷贝技术
更多内容请关注个人博客:https://blog.csdn.net/qq_43148810
|