一、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)转换失败会抛出异常,应增加对其异常处理
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 // r_winnt
#ifndef _TCHAR_DEFINED
typedef WCHAR TCHAR, *PTCHAR;
typedef WCHAR TBYTE , *PTBYTE ;
#define _TCHAR_DEFINED
#endif /* !_TCHAR_DEFINED */
#else /* UNICODE */
#ifndef _TCHAR_DEFINED
typedef char TCHAR, *PTCHAR;
typedef unsigned char TBYTE , *PTBYTE ;
#define _TCHAR_DEFINED
#endif /* UNICODE */
5)多字符转宽字符
wchar_t* charToWchar_t(const std::string& pChar)//入参兼容char*
{
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)//入参兼容wchar_t*
{
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的内存分布
四.Copy On Write写时拷贝技术
如有错误或不足欢迎评论指出!创作不易,转载请注明出处。如有帮助,记得点赞关注哦(⊙o⊙)
更多内容请关注个人博客:https://blog.csdn.net/qq_43148810