C++STL【string】上

string的介绍

详细介绍stringAPI
1、 字符串是表示字符序列的类
2. 标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作
单字节字符字符串的设计特性。
3. string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型(关于模板的更多信
息,请参阅basic_string)。
4. string类是basic_string模板类的一个实例,它使用char来实例化basic_string模板类,并用char_traits
和allocator作为basic_string的默认参数(根于更多的模板信息请参考basic_string)。
5. 注意,这个类独立于所使用的编码来处理字节:如果用来处理多字节或变长字符(如UTF-8)的序列,这个
类的所有成员(如长度或大小)以及它的迭代器,将仍然按照字节(而不是实际编码的字符)来操作。
总结:

  1. string是表示字符串的字符串类
  2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。
  3. string在底层实际是:basic_string模板类的别名,typedef basic_string<char, char_traits, allocator>
    string;
  4. 不能操作多字节或者变长字符的序列。
    使用string类时,必须包含#include头文件以及using namespace std;
// 编码 - 值--符号建立映射关系 -- 编码表
// ascii编码表 -- 表示英文编码表
// unicode    -- 表示全世界文字编码表  utf-8  utf-16  utf-32
// gbk    -- 中文自己量身定做都编码表
// 
// typedef basic_string<char> string; 
int main()
{
	//string s1("hello");
	char str1[] = "hello";
	cout << str1 << endl;
	char str2[] = "吃饭";
	str2[1] += 1;
	str2[3] += 1;

	str2[1] += 1;
	str2[3] += 1;

	str2[1] += 1;
	str2[3] += 1;

	cout << sizeof(char) << endl;
	cout << sizeof(wchar_t) << endl;

	return 0;
}

用的是Unicode编码,中文汉字占两个字节,我们修改汉字前缀的字节看看变化,吃饭 -> 痴泛 -> 持坊 -> 匙芳 ,同音字的变化。如果想要对Uniocde编码进行正确的修改,我们应该使用wstring,
std::wstring主要用于 UTF-16编码的字符,而std::string主要用于存储单字节的字符( ASCII字符集 ),但是也可以用来保存UTF-8编码的字符。(UTF-8和UTF-16是UNICODE字符集的两种不同的字符编码)如果你的程序支持多种语言,那么使用UTF-16来处理字符会方便一些,因为该编码中的每个字符都占用2个字节;而UTF-8中的字符所占的字节可能是1个字节或者多个字节(范围是1 ~ 6 个字节),多字节的字符编码对于处理字符不方便,而且std::string也没有提供对UTF-8的支持。

例:

下面的代码中定义了两个字符串对象,都包含了5个字符:

int main()
{
    string text1 = "你好,朋友";
    wstring text2 = L"你好,朋友";
    cout << text1.length() << endl;//10
    cout << text2.length() << endl;//5
}

由于std::string对UTF-8支持不完善所以输出的结果10并不正确:
上面的程序要输出正确的结果需要使用特殊的UTF-8字符编码API来实现,所以对于UNICODE字符使用std::string来实现字符操作比较麻烦。
转载链接

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

2023框框

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

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

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

打赏作者

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

抵扣说明:

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

余额充值