文章目录
一.string简介
string是基于jave和c++的一个对象,它本身是关于字符串的;
二.string特性
string s;
1) s.empty(); // s为空串 返回true
2) s.size(); // 返回s中字符个数 类型应为:string::size_type
3) s[n]; // 从0开始相当于下标访问
4) s1+s2; // 把s1和s2连接成新串 返回新串
5) s1=s2; // 把s1替换为s2的副本
6) v1==v2; // 比较,相等返回true
7) `!=, <, <=, >, >=` 惯有操作 任何一个大写字母都小于任意的小写字母
capacity() ,返回容器在它已经分配的内存中可以容纳多少元素
resize(Container::size_type n),强制把容器改为容纳n个元素
三.string基本函数
1.头文件及其函数构造
#include<string>
#include<cstring>
string s;//名字为s的字符串,初始化
string s2="shshhsh";//名字为s2,然后赋值
string s3=s2;//将s2的内容赋给s3
string s4=(5,'s');//将s4存入5个s
#include <iostream>
#include <string>
using namespace std;
int main(){
string s1;
string s2 = "c plus plus";
string s3 = s2;
string s4 (5, 's');
cout<<s2<<endl;
cout<<s3<<endl;
cout<<s4<<endl;
return 0;
}
销毁:s.~string();
2.长度计算
string s="sssss";
int l=s.length();
int l=s.size();
cout<<l<<endl;
3.输入输出
string s;
cin>>s;
cout<<s<<endl;
4.访问字符串
跟字符数组一样,可以利用下标来访问,也可以直接用下标进行修改
5、字符串的拼接
string s="a ";
string s1="b";
string s2=s1+s2;
则s2="a b";
6.字符串的插入insert,push_back()
string s1="123456";
string s2="aaa";
s1.insert(5,s2);
s1="12345aaa6"
s1.push_back('w');
s1="12345aaa6w"
7.字符串的删除erase
string s="123456789";
s.erase(5,2);
s="1234589";
s.erase(5);
s="12545"
s.clear();删除所有
8。提取字符串substr
string s="123456";
string s1=s.substr(2,2);
s1="34";
s.substr(pos,pos+len);
如果 pos 越界,会抛出异常;
如果 len 越界,会提取从 pos 到字符串结尾处的所有字符。
9.字符串查找
1).find()函数
string s1="123456";
string s2="235";
int t=s1.find(s2,0);
t=1;
第一个参数为待查找的子字符串,它可以是 string 字符串,也可以是C风格的字符串。第二个参数为开始查找的位置(下标);如果不指明,则从第0个字符开始查找。
find() 函数最终返回的是子字符串第一次出现在字符串中的起始下标。本例最终是在下标6处找到了 s2 字符串。如果没有查找到子字符串,那么会返回一个无穷大值 4294967295。
2).rfind()函数
rfind() 和 find() 很类似,同样是在字符串中查找子字符串,不同的是 find() 函数从第二个参数开始往后查找,而 rfind() 函数则最多查找到第二个参数处,如果到了第二个参数所指定的下标还没有找到子字符串,则返回一个无穷大值4294967295。
string s="123456"
string s1="34";
int t=s.rfind(s1,5);
t=2;
3).find_find_of()函数
find_first_of() 函数用于查找子字符串和字符串共同具有的字符在字符串中首次出现的位置
string s="12345";
string s1="52";
int t=1;
4)find_first_of(args)
查找args中任何一个字符第一次出现的位置
5)find_last_of(args)
最后一个出现的位置
6)find_fist_not_of(args)
查找第一个不在args中的字符
7)find_last_not_of
查找最后一个不在args中出现的字符
10.追加字符或字符串 append
#include<string>
#include<iostream>
using namespace std;
int main()
{
string s="12345";
string s1="52";
s.append(s1);
cout<<s<<endl;
}
11.替换字符或字符串 replace
#include<string>
#include<iostream>
using namespace std;
int main()
{
string s="12345";
string s1="52";
s.replace(1,2,"88");
cout<<s<<endl;
}
12比较与转换
compare函数:
和strcmp函数一样,如果两个字符串相等,那么返回0,调用对象大于参数返回1,小于返回-1。
在compare当中还支持部分比较,里面有6个参数可以设置。
数值转换:
在io的部分有过数值和字符串相互转换的例子,使用的是stringstream函数,在c++11当中有定义好的现成的函数取调用,非常方便。
13.string的大小写转换:tolower()
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s = "ABCDEFG";
for( int i = 0; i < s.size(); i++ )
{
s[i] = tolower(s[i]);
}
cout<<s<<endl;
return 0;
}
14.string的排序sort(s.begin(),s.end());
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
void test9()
{
string s = "cdefba";
sort(s.begin(),s.end());
cout<<"s:"<<s<<endl; // 结果:abcdef
}
15.strtok():分割字符串
void test10()
{
char str[] = "I,am,a,student; hello world!";
const char *split = ",; !";
char *p2 = strtok(str,split);
while( p2 != NULL )
{
cout<<p2<<endl;
p2 = strtok(NULL,split);
}
}
16.字符串分解单词
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s="a cool boy";
string ss;
stringstream s1;
s1<<s;
while(s1>>ss)
{
cout<<ss<<endl;
}
}
//
a
cool
boy
四.string类函数总结
1、string类函数 1) =, s.assign() // 赋以新值
2). swap() // 交换两个字符串的内容
3). +=, s.append(), s.push_back() // 在尾部添加字符
4). s.insert() // 插入字符
5). s.erase() // 删除字符
6) .s.clear() // 删除全部字符
7). s.replace() // 替换字符
8).+ // 串联字符串
9). ==,!=,<,<=,>,>=,compare() // 比较字符串
10). size(),length() // 返回字符数量
11). max_size() // 返回字符的可能最大个数
12). s.empty() // 判断字符串是否为空
13). s.capacity() // 返回重新分配之前的字符容量
14). reserve() // 保留一定量内存以容纳一定数量的字符 ,通常用与翻转一定量的字符
15). [ ], at() // 存取单一字符
16). >>,getline() // 从stream读取某值
17). << //将谋值写入stream
18). copy() // 将某值赋值为一个C_string
19) .c_str() //返回一个指向正规C字符串(C_string)的指针 内容与本string串相同 有’\0’
20). data() //将内容以字符数组形式返回 无’\0’
21). s.substr() // 返回某个子字符串
22). begin() end() //提供类似STL的迭代器支持
23). rbegin() rend() // 逆向迭代器
24) .get_allocator() //返回配置器