教你使用STL之string

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ZWE7616175/article/details/81986204

字符串是程序设计中最复杂的内容之一。STL string类提供了强大的功能,使得许多繁琐的编程内容用简单的语句就可以完成。string字符串减少了C语言编程中常见的破坏性错误:

* 超越数组边界;
* 用野指针来访问字符串;
* 释放某一数组原先所分配的存储单元后仍保留了“悬挂指针”。

1.包含头文件

#include <string>

2.string声明及初始化

string s1;//调用默认构造函数,s1为空串
string s2(s1);//拷贝构造
string s3("12345");//将s3初始化为"12345"
string s4(n, 'c');//将s4初始化为n个'c'
string s5(s4, 0, 4);//用s4[0,4]范围的元素s5
string s6 = s5 + "123";//要求+左右操作符至少有一个是string类型
string s7(s1.begin(), s1.end());//用迭代器来构造

3.string对象的读写

(1)通过cin从标准输入读取,cin会自动忽略读取前的空白字符,读取再次遇到空白字符,停止读取。
(2)用getline读取整行文本,写入到string中,读取遇到换行符停止或文件尾,读取的内容不包括换行符。

cin >> s;//从标准输入流中读取一个以空白字符分割的字符串,写入s
getline( is, s);//从输入流is中读取一行字符,写入带s中

4.string的基本使用

s.empty();//判断是否为空,bool类型
s.size();或s.length();//返回字符的个数
s[n]  //返回位置为n的字符,从0开始计数
s1+s2  //连接字符串,连接字符串必须有string类,两个字符串不能用+连接

5.string对象中字符的处理

头文件:

#include <cctype>
isalnum(c);//判断是否为字符或数字
isalpha(c);//判断是否为字母
iscntrl(c);//判断是否为控制符
isdigit(c);//判断是否为数字
isgraph(c);//如果c不是空格,则可以打印
isupper(c);//判断是否为大写字符
islower(c);//判断是否为小写字符
isprint(c);//判断是否为可打印字符
ispunct(c);//判断是否为标点
isspace(c);//判断是否为空白字符
isxdigit(c);//判断是否为十六进制
tolower(c);//将大写字符转换为小写字符
toupper(c);//将小写字符转换为大写字符

6.对象操作函数

(1)容量

s.size();//返回字符的个数
s.length();/返回字符的个数
s.max_size();//s可以存放的最大字符个数
s.resize(newsize);//改变string的大小为newsize,影响size
s.capacity();//容量的大小
s.reserve();//为重新分配内存,影响capacity,按照(n*16)-1分配
s.clear();//清空s
s.empty();//判断是否为空,bool类型

(2)修改

s1+=s2;//连接字符串
s.append(str);//将str接到s的后面
s.push_back(c);//在s最后插入字符c
s.assign();//替换字符串
s.insert();//插入字符串
s.erase();//删除字符串
s.replance(2, 3 ,"aa");//从第2个起连续3个替换为"aa"
s.swap();//交换两个字符串

insert函数

s.insert(p, str);//将字符串str插入到p的位置
s.insert(p, n, c);//迭代器p前插入n个c
s.insert(index, str);//将str插入到index位置
s.insert(index, str, pos1, pos2);//将str的[pos1, pos2]插入到index位置
s.insert(index, "12345");//将"12345"插入到index位置
s.insert(index, n, c);//在index位插入n个c字符
s.insert(it, '1');//在it迭代器的位置插入1
s.insert(it, n, c);//在it迭代器位置插入n个c
s.insert(it, first, second);//在it迭代器所在位置插入迭代器[first, second]间的字符

assign函数

s.assign(b ,e);//用迭代器b到e范围的内容替换s
s.assign(n ,t);//用n个t替换s
s.assign(s1, pos, len);//从s1的下标pos开始连续替换len个

(3)访问

s[i];//下标为i的字符
s.at[i];//下标为i的字符

(4)迭代器

s.begin();//字符串的首位置
s.end();//字符串的末尾位置
s.rbegin();//反向迭代器的首位置
s.rend();//反向迭代器的末尾位置

(5)字符串操作

s.c_str();//转换为C字符串
s.data();//
s.get_allocator();//
s.copy();//
s.find("abc");//查找第一个出现字符串"abc"的位置,找到返回下标值
s.rfind("abc");//查找最后一个出现字符串"abc"的位置,找到返回下标值
find_first_of(str, i);//返回第一个与指定字符串中任意字符匹配的字符位置
find_last_of(str, i);//返回最后一个与指定字符串中任意字符匹配的字符位置
find_first_not_of(str, i);//返回第一个与指定字符串任何字符都不匹配的位置
find_last_not_of(str, i);//返回最后一个与指定字符串任何字符都不匹配的位置
s.substr(i, j);//截取s中从i到j的子串
s.compare();//比较字符串

(6)比较string对象

==、!=、<、<=、>、>=
比较规则:

* 如果字符位置字符相同,较长的大于较短的;
* 如果对应位置不同,直接比较第一个不同字符的结果。

猜你喜欢

转载自blog.csdn.net/ZWE7616175/article/details/81986204