文章目录
一、什么是string
二、string的操作
1.string的定义
2.string中内容的访问
(1)通过下标访问
(2)通过迭代器访问
3.string中的函数
(1)operator+=
(2)compare operator
(3)length()/size()
(4)insert()
(5)erase()
(6)clear()
(7)substr()
(8)string::npos
(9)find()
(10)replace()
一、什么是string
我们在C语言中,存储字符数组是用char str[]来存放字符串,但是用这个存储的时候一般会显得麻烦,还容易产生一些错误,C++在STL中加入了string类型,使得操作起来更加的方便
要使用string,需要添加头文件#include <string>
二、string的操作
1.string的定义
定义string的方式跟基本类型相同:
string str;
初始化:
string str = "abcd";
2.string中内容的访问
(1)通过下标访问
可以像字符数组那样去访问string
str.length();
为str的长度
#include <iostream> #include <string> using namespace std; int main() { string str = "abcd"; for (int i = 0; i< str.length(); i ++ ) cout << str[i]; return 0; }
输出结果为:abcd
这里再说一下输入输出
输入有两种方式,一种是不能读入空格:cin,另一种是能读入空格:getline(cin, str);,即如果用cin读入一个字符串的话,碰到空格就会停止读入,而getline(cin, str);则是碰到回车(换行)才会停止读入
输出的话可以用cout来输出,当然也可以通过printf进行输出,但是过程有点繁琐,这里不介绍
(2)通过迭代器访问
一般通过(1)就可以满足访问的要求,但是string中的某些函数,比如insert(),erase()则要求用迭代器作为参数,所以我们还是要介绍一下迭代器的用法
定义一个迭代器
string::iteratoer it;
通过上述定义我们就得到了迭代器it,我们就可以通过*it去访问string里的每一位
#include <iostream> #include <string> using namespace std; int main() { string str = "abcd"; for (string::iterator it = str.begin(); it != str.end(); it ++ ) cout << *it; return 0; }
当然我们也可以简写成:
#include <iostream> #include <string> using namespace std; int main() { string str = "abcd"; for (auto it = str.begin(); it != str.end(); it ++ ) cout << *it; return 0; }
输出结果为:abcd
3.string中的函数
(1)operator+=
这是string的加法,可以把两个string直接拼接起来
#include <iostream> #include <string> using namespace std; int main() { string str1 = "abcd"; string str2 = "efg"; string str3 = str1 + str2; cout << str3; return 0; }
输出结果为:abcdefg
(2)compare operator
两个string
类型可以直接使用==, !=, <, <=, >, >=
比较大小,比较的规则是字典序
#include <iostream> #include <string> using namespace std; int main() { string str1 = "abcd"; string str2 = "efg"; if (str1 > str2) cout << "str1 > str2"; else if (str1 == str2) cout << "str1 == str2"; else cout << "str1 > str2"; return 0; }
输出结果为:str1 > str2
(3)length()/size()
length()
返回string
的长度,即存放的字符数,时间复杂度为O(1),size()
与length()
的用法基本相同
#include <iostream> #include <string> using namespace std; int main() { string str1 = "abcd"; string str2 = "efg"; cout << str1.size() << ' ' << str2.length(); return 0; }
输出结果为:4 3
(4)insert()
这里介绍insert()
的两种写法
insert(pos, string) 在pos
号的位置插入字符串string
#include <iostream> #include <string> using namespace std; int main() { string str1 = "abcd"; string str2 = "efg"; str1.insert(2, str2); //在str1[2]处插入str2 cout << str1; return 0; }
输出结果为:abefgcd
insert(it, it2, it3)it
为原字符串的欲插入位置,it2
和it3
为待插入字符串的首位迭代器,用来表示[it2, it3)
将被插在it
的位置上
#include <iostream> #include <string> using namespace std; int main() { string str1 = "abcd"; string str2 = "efg"; str1.insert(str1.begin() + 2, str2.begin(), str2.end()); cout << str1; return 0; }
输出结果为:abefgcd