C++ primer学习笔记第三章 - 字符串

本文详细介绍了C++中字符串对象的初始化、操作以及常用成员函数的使用,包括拷贝初始化、直接初始化、赋值、输入输出、查找、替换、插入和删除等操作。同时,强调了字符串字面值与string对象的区别以及防止缓冲区溢出的重要性。
摘要由CSDN通过智能技术生成

string

初始化

string s1; // 默认初始化
string s2 = s1;// 拷贝初始化
string s3(s1); // 直接初始化,string s2 = s1 等价
string s4(“hello string”);//直接初始化,s4 是字面值常量的副本
string s5 = “hello string”;//拷贝初始化, string s4(“hello string”) 等价
string s6(10, ‘c’); //初始化由连续10个字符c组成的串

操作

s.empty() s为空返回true,否则返回false

s.size() 返回s中的字符个数

getline(cin,s) 读取一行文字,读取到换行符为止(也包括换行符) ,s字符串不包含换行符

=, assign() // 赋以新值

swap() // 交换两个字符串的內容

+=, append(), push_back() // 在尾部添加字符

insert() // 插入字符

erase() // 删除字符

clear() // 删除全部字符

replace() // 替换字符

+ // 串联字符串

==, !=, <, <=, >, >=, compare() // 比较字符串

size(), length() // 返回字符数量

max_size() // 返回字符的可能最大个数

empty() // 判断字符串是否为空

capacity() // 返回重新分配之前的字符容量

reserve() // 保留一定量内存以容纳一定数量的字符

[ ], at() // 返回某一位置的字符

>>, getline() // 输入

<< // 输出

copy() // 拷贝

c_str() // 将内容以C_string返回

data() // 返回一个非null终止的c字符数组

substr() // 返回某个子字符串

查找函数(find, rfind…)

begin(), end() // 提供类似STL的迭代器支持

rbegin(), rend() // 逆向迭代器

get_allocator() // 返回配置器

#include<iostream>
#include <string>
using std::string;
using std::cout;
using std::cin;
using std::endl;
int main()
{
	// 初始化
	string s1; // 默认初始化
	
	string s2 = s1;//  拷贝初始化 
	string s3(s1); // 直接初始化,string s2 = s1 等价

	string s4("hello string");//直接初始化,s4 是字面值常量的副本
	string s5 = "hello string";//拷贝初始化, string s4("hello string") 等价

	string s6(10, 'c'); // 初始化由连续10个字符c组成的串

	cout << "s1=" << s1 << " s2=" << s2 << " s3=" << s3 << " s4="<<s4 << " s5=" << s5 << " s6=" << s6 << endl;

	// string 对象上的操作
	if (s1.empty()) // s1为空返回true,否则返回false
	{
		cout << "s1 is empty" << endl;
	}
	if (!s2.size())// 返回s2中的字符个数
	{
		cout << "s2 is empty" << endl;
	}
	// 输入 s1 s2 s3 => s1 = "s1" s2 = " s2 s3"
	cin >> s1; // 读取一行文字,但是只把前面的文字
	cout << s1 << endl; // 

	std::getline(cin,s2); //读取一行文字,读取到换行符为止(也包括换行符)
	cout << s2 << endl;


}

string::size_type

从逻辑上讲,size()成员函数应该似乎返回整型数值,但事实上,size操作返回是string::size_type类型的值。string类类型和其他许多库类型都定义了一些配套类型(companion type)。通过这些配套类型,库函数的使用就与机器无关(machine-independent)。size_type就是这些配套类型中的一种。它定义为与unsigned型(unsigned int获unsigned long)具有相同含义,而且保证足够大的能够存储任意的string对象的长度。string::size_type它在不同的机器上,长度是可以不同的,并非固定的长度。但只要你使用了这个类型,就使得你的程序适合这个机器。与实际机器匹配。string对象的索引也应为size_type类型。

字面值和string对象相加

当把string对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保每个加法运算符(+)的两侧的运算对象至少有一个是string。

string s1=“abc”;

string s2=s1+"!" ; //正确

string s3=“love”+“you” ; //错误,两个运算对象都不是string

string s4=s1+","+“efg” ; //正确,根据它的工作原理和连续输入连续输出,首先得到 s1+"," 结果是string对象,它作为第二个加法运算符的左侧运算对象,满足规则

string s5=“efg”+","+s1; //错误,字面值不能直接相加

注意:C++语言中的字符串字面值并不是标准库类型string对象。字符串字面值是常量,存放在常量存储区。

可以使用范围for循环

下标运算符

不幸的是,这种通过下标访问不存在的元素的行为非常常见,而且会产生很严重的后果。所谓的缓冲区溢出指的就是这类错误,这也是导致PC及其他设备上应用程序出现安全问题的一个重要原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值