赋值

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 的使用的更多相关文章

  1. 65)STL中string的知识

    1)代码展示: string是一个类,只不过封装了 char*  而且还封装了  很多的字符串操作函数 2)string类的初始化: string的构造函数 ²  默认构造函数: string();  ...

  2. STL中map用法

    Map是 STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于 这个特性,它完成有可能在我们处理一对一数据的 ...

  3. (转载) STL中map用法详解

    Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候 ...

  4. c++中string (MFC)

    题目:UVALive - 6439    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid= ...

  5. STL库中string类内存布局的探究

    在STL中有着一个类就是string类,他的内存布局和存储机制究竟是怎么样的呢? 这就是建立好的string 可以看出,图中用黄色框框标注的部分就是主要区域 我们用来给string对象进行初始化的字符 ...

  6. STL中的set容器的一点总结

    1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...

  7. 【转】 STL中的set容器的一点总结

    1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...

  8. C++之STL之string

    /*C 语言中字符数组一般会采用char str[]来存放,但是显得会比较麻烦,C++在stl中加入了string类型,对字符串常用的功能进行了封装,操作起来比较方便*/#include<cst ...

  9. C++ STL中Map的按Key排序和按Value排序

    map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value.假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区 分),我们用map来进 ...

随机推荐

  1. mac下使用minicom几个注意事项

    一 安装: 安装是比较简单的,直接: brew install minicom 二 查找串口驱动 这里不得不吐槽苹果公司,搞一个串口,从来就不像ubuntu中那样很简洁的名字,这里的名字一般是一长串, ...

  2. 大部分人都会忽略的Python易错点总结

    python中复数实现(-2) 0.5和开根号sqrt(-2)的区别** (-2)**0.5和sqrt(-2)是不同的,前者是复数后者是会报错的. print((-2)**0.5) #输出:(8.65 ...

  3. go 中recover捕获异常

    recover 仅在延迟函数 defer 中有效,在正常的执行过程中,调用 recover 会返回 nil 并且没有其他任何效果.重要的事再说一遍:仅当在一个defer函数中被完成时,调用recove ...

  4. 高强度学习训练第六天总结:Redis主从关系总结

    Redis主从复制机制 1.读写分离的好处 性能优化:主服务器专注于写操作,可以更适合写入数据的模式工作:同样,从服务器专注于读操作,可以用更适合读取数据的模式工作. 强化数据安全,避免单点故障:由于 ...

  5. 使用Python轻松批量压缩图片

    在互联网,图片的大小对一个网站的响应速度有着明显的影响,因此在提供用户预览的时候,图片往往是使用压缩后的.如果一个网站图片较多,一张张压缩显然很浪费时间.那么接下来,我就跟大家分享一个批量压缩图片的方 ...

  6. 使用POI导出百万级数据到excel的解决方案

    1.HSSFWorkbook 和SXSSFWorkbook区别 HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls,一张表最大支持65536行数据,256列 ...

  7. InnoDB On-Disk Structures(五)-- Redo Log & Undo Logs (转载)

    1.Redo Log The redo log is a disk-based data structure used during crash recovery to correct data wr ...

  8. s3c2440裸机-内存控制器(三、norflash初始化-时序设置)

    1.norflash与2440的硬件连接 2.初始化nor,配置nor时序 1.如图是S3C2440的内存控制器的可编程访问周期读写时序,里面的时间参数要根据外部设备的性能进行配置,这里先列出时间参数 ...

  9. 八、VTK安装并运行一个例子

    一.版本 win10 VS2019 VTK8.2.0 其实vtk的安装过程和itk的安装过程很是类似,如果你对itk的安装很是熟悉(也就是我的博客一里面的内容,那么自己就可以安装.) 如果不放心,可以 ...

  10. 工具推荐--刷LeetCode的神器

    本文首发于微信公众号:[坂本先生],文章地址为: https://mp.weixin.qq.com/s/vHv5hO8nils_g2VSKwu1Cg如有转载请标明出处 今天给大家安利一款快速刷Leet ...