|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2022-10-21 17:59:35
|
显示全部楼层
如下有些包含在< string >头文件里,只能string类型使用,有些既可以在容器也可以在string中,string的绝大多数用字符串数组变量(char*)不行,特殊的我会标明。
一.构建string类型
1:string str; // 生成空字符串 str
2:string s(str); //生成字符串s 并用str初始化
3:string s(str, begin,len); // 将字符串str中从下标begin开始、长度为len的部分作为字符串初值
4:string s(str,len); //以string类型str的前len个字符串作为字符串s的初值
5:string s(num,char); // 生成num个c字符的字符串
6:string s(str,index): //将字符串str中从下标index开始到字符串结束的位置作为字符串初值
PS:
1,2,3,4,6可以认为:
string s(str,begin,len) begin缺省时默认为0,len缺省时默认从begin到串尾。
(begin是下标,不是迭代器)。
二,string类型的输入
1: cin>>str;
2: getline(cin,str,b); //str只能时string类,必须包含<string>,b为结束标志
3: cin.getline(str,len,b); //str可以是char*,且为STL函数,不需要<string>
PS:
1 从缓冲区第一个不为不为空或’\n'的位置开始读,不能接受含任何空格的字符串,且输入后,’\n'仍留在缓冲区,
需要getchar()吃掉
2,3会自动去掉'\n'
三,字符串的比较
字典顺序小的字符串小
string a="book",b="black";
则:a<b
四,string的插入(单个字符):push_back,insert( )
s1.push_back('a'); //在尾部插入一个字符
s1.insert(s1.begin()+i,n,c) //在下表为i的位置,插入n个字符,n缺省时为 1
PS:这两个函数在vector中也有,用在string中时不必<string>头文件也可使用。
五,string的拼接字符串:append( ),+
string s1="abc",s2="def";
s1.append(s2); //在s1的末尾加上s2,s2为 "abcdef";
s1.append(s2,pos,len) //在s1的末尾加上s2从pos(索引)处开始len个字符的子串。
s1.append(s2,len) //在s1的末尾加上s2的前len个字符
s1.append(n,c) //在s1的末尾加上n个字符c。
s1.append(s2.begin(),s2.end()) //用迭代器截取s2的中间字串,并拼接在s1的末尾。
s1+=s2;
PS:
(1):append()属于<string>,s1.append(s2),在s1的末尾加上s2,s2可以是string或conSt char*
(2):+ 则是重载运算符。
六,string的字符串替代函数:replace()
原型:string& replace (size_t pos, size_t len, const string& str);
原型:string& replace (iterator i1, iterator i2, string& str);
原形:string& replace (size_t pos, size_t len, const string& str, size_t subpos);
str.replace(pos,len,arr) ; //将str的pos位置开始len长度的字符替换为arr
str.replace(str.begin(),str.end(),str); //将str的begin开始到end的字符替换为arr,迭代器操作
str.replace (pos,len,arr,pos2,len2); //替换为arr从pos2开始len2长度的字串。
PS:
replace()只属于<string>
七,string的删除指定位置字符或字串:erase()
string& erase( size_t pos = 0m size_t n = npos);
interator erase( iterator position);
iterator erase( iterator first, iterator last);
对应得三种用法:
erase(pos,n); //将string的pos处开始的n个字符删去,返回值修改后的string对象引用
erase(position); //删除position处的字符,position 是迭代器,并返回下个元素的迭代器
erase(first,last); //将区间[first,last]删去,fast和last都是迭代器,返回last下个字符的迭代器
PS:
(1)erase()既在<string>中,也可以用来操作容器,如2,3。
(2)void pop_back()也可以用来删去容器的最后一个字符。
八,string 大小替换函数
检查字符是否为字母
bool isalpha(ch);
检查字符是否为数字
bool isdigit(ch);
检查字符是否为英文字母小写
bool islower(ch);
检查字符是否为英文字母大写
bool isupper(ch);
检查字符是否为英文或者数字
bool isalnum(ch);
1.大写转小写
low_ch = tolower(high_ch);
2.小写转大写
high_ch = toupper(low_ch)
PS:以上是标准函数库函数,不包含在<string>头文件
以下是对整个字符串操作,是要包含在<string>中的,返回值转变后的指针
1.str=strupr(str) //转大写
2.str=strlwr(str) //转小写
九,string中查找指定字符或字符串:find()
string s1="absade";
cout<<s1.find('a'); //默认找到第一个
cout<<s1.find(2,'a'); //从下标2开始寻找一直到末尾
cout<<s1,rfind('a') //反向寻找
cout<<s1.find_first_of('a'); //找到第一个
cout<<s1.find_last_of('a'); //找到最后一个
cout<<s1.find("bs"); //找字串
十,字符串截取- String str = "Hello,World!";
- String substr1 = str.substring(6); //"World!"
- String str = "Hello,World!";
- String substr2 = str.substring(6, 10); //"Worl"
PS:
(1)find()函数用的很广,需要包含在<algorithm>,主要用在查找容器的某个对象,返回值是迭代器,用在string中,主要用于查找指
定字符和子串,返回值是下标。
(2)如果没找到对象,迭代器返回最后一个的下一个,下标则返回一个特殊值,s1,npos。
十,排序函数
sort(s.first,s.end,cmp) //按照cmp方法,对str从first,到end,开始排序,cmp可自定义
//该函数需要包含<algorithm>,许多对象都可以使用
|
|