C++字符串std::string

一、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                     // 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的内存分布

深入理解C++中std::String的内存布局

四.Copy On Write写时拷贝技术

Copy On Write写时拷贝技术

如有错误或不足欢迎评论指出!创作不易,转载请注明出处。如有帮助,记得点赞关注哦(⊙o⊙)
更多内容请关注个人博客:https://blog.csdn.net/qq_43148810

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大胡子的艾娃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值