STL 中 string 的使用
赋值
string 类型变量可以直接赋值
str = "string"; // str 是 一个 string 类型变量 //等价于 str.assign("string");
str = b; // b 可以是 string 类型 也可以是 char * 类型
也可以方便地添加字符串
str += 'c';
str += "string";
str += b;//b 可以是 string 类型 也可以是 char * 类型
读取
可以直接使用[]操作符读取。
char ch = str[5]; // ch 值为 'g' // string str = "string";
迭代器
begin() 返回指向第一个字符的迭代器
end() 返回指向最后一个字符之后的迭代器
string 变量的字符范围[ begin(), end() )
rbegin() 返回指向最后一个字符的迭代器
rend() 返回指向第一个字符之前的迭代器 [ rbegin(), rend() )
vector<char>::iterator itr = str.begin(); // string str = "string";
容量
size() 和 length() 都返回字符串的长度。
clear() 清空字符串。
empty() 检查字符串是否为空。
str.size();
str.length;
str.clear();
str.empty();
修改
push_back()、pop_back() 在字符串末尾 添加/删除 字符。
swap() 交换两个字符串的内容。
str.push_back('r'); //只能添加一个字符,不能添加字符串
str.pop_back(); // 删除最后一个字符
str.swap(str2);
增加
append
append([字符串]) // 添加字符串
append([字符串], [起始位置], [长度]) // 将 [字符串] 中从 [起始位置] 开始 [长度] 长的子串添加到字符串中
append([个数], [字符]) // 添加 [个数] 个 [字符]
str.append("this is a string");
str.append("this is a string",5,2); // 添加了子串 "is"
str.append(5,'c'); // 添加 "ccccc"
insert
insert([位置], [字符串])
insert([位置], [字符串], [起始位置], [长度])
insert([位置], [字符串], [长度])
insert([位置], [个数], [字符])
std::string str="to be question";
std::string str2="the ";
std::string str3="or not to be ";
std::string::iterator it;
str.insert(6,str2); // to be (the )question
str.insert(6,str3,3,10); // to be (not to be )the question
str.insert(10,"that is cool",8); // to be not to be (that is )the question
str.insert(15,1,':'); // to be not to be (:) that is the question
注意:插入的默认是字符串而不是字符,所以尝试在某个位置插入一个字符是不合法的。
关于使用迭代器插入数据的方法未在此处列出。
删除
erase([位置]) // 删除从 [位置] 开始的子串
erase([位置],[长度]) // 删除从 [位置] 开始 [长度] 长的子串
erase([指针位置]) // 删除 [指针位置] 处的字符
erase([指针起始位置], [结束位置]) // 删除 [ [指针位置起始位置], [结束位置] ) 范围内的子串
str.erase(5);
str.erase(5,3);
str.erase(str.begin());
str.erase(str.begin()+5,str.end());
根据上述用法可知,当删除时已知删除长度,那么使用的位置是下标;当删除时知道的时开始位置和结束位置,那么使用的位置是迭代器。
相关函数:clear() 见容量函数
格式转换
c_str() 转换为 char * 格式。
str.c_str();
查找
find() 查找某个字符串或者某个字符,返回找到的第一个字符串的起始位置。
str.find("find a char", 5);//从第五个字符开始找 “find a char”
比较
可以直接使用比较运算符比较两个 string 变量
str == str2; //等价于 str.compare(str2); compare()函数返回int类型的比较结果。
str > str2;
string类型同样支持使用
输入输出
getline() 从输入流中获取一行字符串。
std::getline(cin, str);
参考代码
#include <iostream> // cin cout
#include <string> // string
#include <vector> // vector
#include <fstream> // ifstream
using namespace std;
int main(){
//////////////////////////////////////////////////
// 赋值
string a = "this is a string";
cout << a << endl;//this is a string
// 直接给 string 类型变量赋值
a = "assign a string directly";
cout << a << endl;//assign a string directly
// 通过 char * 类型变量直接赋值
char b[30] = "this is a char string";
a = b;
cout << a << endl;//this is a char string
//////////////////////////////////////////////////
// 读取
cout << a[10] << endl;//c
//////////////////////////////////////////////////
// 迭代器
// 顺序遍历
for (vector<char>::iterator iterator = a.begin(); iterator < a.end(); iterator++) {
cout << *iterator;
}
cout << endl;
// 逆序遍历
for (vector<char>::reverse_iterator iterator = a.rbegin(); iterator < a.rend(); iterator++) {
cout << *iterator;
}
cout << endl;
//////////////////////////////////////////////////
// 查找
// 查找 “is”
std::size_t found = a.find("is");
if (found!=std::string::npos)
std::cout << "first 'is' found at: " << found << '\n';
// 查找下一个 “is”
found = a.find("is",found+1);
if (found!=std::string::npos)
std::cout << "second 'is' found at: " << found << '\n';
//////////////////////////////////////////////////
// 比较
a = "apple";
string c = "banana";
cout << (a == c) << endl;//0
cout << (a < c) << endl;//1
cout << a.compare("banana") << endl;// -1 "apple" < "banana"
//////////////////////////////////////////////////
// 输入输出
ifstream cin("/Users/apple/Applications/gyp/test/actions-multiple/src/input.txt");
getline(cin,a);// 读取第一行
getline(cin,a);// 读取第二行
cout << a << endl;
}
STL 中 string 的使用的更多相关文章
- 65)STL中string的知识
1)代码展示: string是一个类,只不过封装了 char* 而且还封装了 很多的字符串操作函数 2)string类的初始化: string的构造函数 ² 默认构造函数: string(); ...
- STL中map用法
Map是 STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于 这个特性,它完成有可能在我们处理一对一数据的 ...
- (转载) STL中map用法详解
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候 ...
- c++中string (MFC)
题目:UVALive - 6439 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid= ...
- STL库中string类内存布局的探究
在STL中有着一个类就是string类,他的内存布局和存储机制究竟是怎么样的呢? 这就是建立好的string 可以看出,图中用黄色框框标注的部分就是主要区域 我们用来给string对象进行初始化的字符 ...
- STL中的set容器的一点总结
1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...
- 【转】 STL中的set容器的一点总结
1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...
- C++之STL之string
/*C 语言中字符数组一般会采用char str[]来存放,但是显得会比较麻烦,C++在stl中加入了string类型,对字符串常用的功能进行了封装,操作起来比较方便*/#include<cst ...
- C++ STL中Map的按Key排序和按Value排序
map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value.假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区 分),我们用map来进 ...
随机推荐
- 如何将本地的项目推送到github
一.创建密钥 1.本地终端命令行生成密钥 访问密钥创建的帮助文档:https://help.github.com/en/github/authenticating-to-github/generati ...
- Css里的box-shadow的值分别代表什么
以下为例: box-shadow:1px 2px 3px 4px color inset; 1px:表示沿x轴的正方向的长度(如果是负数,则为沿x轴的负方向的长度); 2px:表示沿y轴的正方向的长度 ...
- 在 .NET Core 3.0 中支持 Newtonsoft.Json 的使用
.NET Core 3.0 已经使用了一整套内置的 Josn 序列化/反序列化方案,而且看上去效率还不错.但对于某些项目必须使用到 Newtonsoft.Json 的时候,就会抛出如下异常: Syst ...
- CSS入门(边框、轮廓、元素的分类、盒子模型的三个构成部分)
一.边框属性 作用:给元素加上一个边框 第一种: border-top border-bottom border-left boder-right 三个属性值: 粗细 线型 颜色 第二种: borde ...
- WestWild: 1.1: Vulnhub Walkthorugh
启动界面 主机层面扫描: ╰─ nmap -p1-65535 -sV -A 10.10.202.131 Starting Nmap 7.70 ( https://nmap.org ) at 2019- ...
- 一文解读Redis (转)
本文由葡萄城技术团队编撰并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 引言 在Web应用发展的初期,那时关系型数据库受到了较为广泛的关注和应用,原 ...
- php7深入理解匿名函数和回调函数
匿名函数是没有名称的函数,可以将函数赋值给变量,再调用使用,回调函数是指作为一个参数值传值另外一个函数使用的函数. //匿名函数 没名称的函数 $a=function (){echo "ww ...
- Data Guard:Oracle 12c –新增和更新的功能 (Doc ID 1558256.1)
Data Guard: Oracle 12c – New and updated Features (Doc ID 1558256.1) APPLIES TO: Oracle Database - E ...
- reduce方法实现累加累乘的方式
reduce函数对参数序列中的值进行积累,第二个参数可以为:str,tuple,list,代码示例如下: from functools import reduce#实现列表内的所有数的累加,即第一步x ...
- 正则表达式(Regular Expression)入门
一.正则表达式的使用场景: 上传文件类型的判断,电子邮件的判断,电话号码的判断,文本的搜索与替换. 二.正则表达式的语法规则: 1.行定位符: ^表示行的开始,$表示行的结尾 ^tm 可以匹配 tm ...