c++---有关string用法总结
C++的string标准库
string是C++标准库的重要部分,主要用于字符串处理。使用string库需要在同文件中包括该库 #include<string>
声明
1 | string s; |
初始化
使用等号的初始化叫做拷贝初始化,不使用等号的初始化叫直接初始化。
1 | #include<iostream> |
string类型的读入
1 | string s; |
字符串末尾添加字符
可以用+号和append()函数在函数的末尾添加字符。
1 | string s; |
sting类型变量的访问
string字符串变量访问可以采用at, operator[]来访问指定index对应的字符。其中at有越界检查,如果index越界,无论Debug还是在Release编译的环境下,程序异常跳出执行;operator[]无越界检查,如果index越界,则会取得不可预知的字符。
1 | string s("abcd"); |
string类型的长度
1 | string s = "Hello, world!" |
查找字符串的子字符串
1 | string s = abcdefg, subs = "efg"; |
指向首字符和末尾字符的迭代器(begin,end)
1 | string s("abcdefg"); |
empty(), clear()
empty()可以用来检查字符串是否为空,clear()用来清空字符串。
1 | string s1 = "012345"; |
insert()在指定index处插入字符或字符串
1 | // insert原型函数,在index插入count个字符ch。 |
erase()删除字符
erase()函数有三个原型:
1 | string& erase(size_t pos = 0, size_t n = npos); |
因此erase()总共有三种用法:
1 | erase(pos, n); //删除从pos开始的n个字符,比如erase(0, 1)就是删除第一个字符 |
应用实例:
1 | string str ("This is an example phrase."); |
注:可以把string看成一个迭代器,所有关于迭代器的操作在string上面基本上都适用。
获取子字符串substr()
函数原型:
string substr(size_t pos = 0, size_t len = npos) const;功能: 从子字符串中获取想要的子字符串
参数:
- pos: 想要获取的子字符串的第一个字符的位置,如果pos等于字符串长度,则该函数返回一个空字符串,如果等于字符串长度,则该函数返回一个空的字符串,如果该长度大于字符串长度,则抛出一个out_of_range。 注:第一个字符的下标从0开始。
- len: 子字符串中要包含的字符数, string::npos的值表示知道字符串末尾的所有字符。
返回值:带有对象子字符串的字符串对象。
应用实例:
1 | string s1 = "Hello World" |
stringstream
stringstream是 C++ 提供的一个字符串流(stream),和之前学过的iostream、fstream有类似的操作方式,要使用stringstream,必须包含其头文件:
1 |
|
< sstream > 库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。另外,每个类都有一个对应的宽字符集版本。一般情况下使用stringstream就足够,因为字符串要频繁的涉及到输入输出。
< sstream > 使用string对象来代替字符数组,这样可以避免缓冲区溢出的危险。而且,传入参数和目标对象的类型被自动推导出来,即便使用了不正确的格式化符也没有危险。
与文件流fstream类似,通过插入器(<<)和析取器(>>)这两个运算符可以直接对stringstream上的数据输入输出,而将stringstream中的全部数据输出则是使用成员函数str(),其有两种形式:
1、void str() //无参形式,用于将stringstream流中的数据以string字符串的形式输出
2、void str (const string& s)//以字符串为参数,用以覆盖stringstream流中的数据
可以用stringstream完成int与string之间的转换
1 | stringstream s1; |
1 | stringstream stream1; |
其他函数
reverse(str.begin(),str.end())//字符串反转函数