大家好,欢迎来到IT知识分享网。
1、本质:
string是C++风格的字符串,其本质是一个类。
2、string和char*的区别:
- char*是一个指针
- string是一个类,类内部封装了char*,管理这个字符串,是一个char*的容器。
3、string构造函数原型
string(); //创建一个空的字符串 string(const char* s); //利用字符串s初始化 string(const string *str); //使用一个string对象初始化另一个string对象 string(int n,char c); //使用n个字符c初始化
相关函数:
1.字符串查找函数find
没找到则返回极大值
#include<bits/stdc++.h> using namespace std; int main() { string s; cin>>s; cout<<s.find("aa")<<endl;//查找字符串“aa”首次出现位置 cout<<s.find("aa",3)<<endl;//查找下标3开始(即第四个字符开始)字符串“aa”首次出现位置 cout<<s.find('a')<<endl;//查找字符串'a'首次出现位置 cout<<s.find('a',3)<<endl;//查找下标3开始(即第四个字符开始)字符串“aa”首次出现位置 cout<<s.rfind("aa")<<endl;//查找字符串“aa”最后一次出现位置 } /* aabaabaab 0 3 0 3 6 */
2.计算某一字符出现个数
int cnt = count(str.begin(), str.end(), ' '); //计算空格数量
3.取子串
str = str.substr(cnt); //取从cnt下标开始一直到结束的所有字符 str = str.substr(cnt,m); //取从cnt下标开始的m个字符
4.查找第一个大于或大于等于的字符
x=lower_bound(b+1,b+m+1,y)-b;//从[first,last)中找第一个大于等于y的元素的地址,-b是转化为下标 x=upper_bound(b+1,b+m+1,y)-b;//同理,只不过找第一个大于的
5.查找某一字符串中任意字符首次/末次出现位置
find_first_of()方法在字符串中查找参数中任何一个字符首次出现的位置。例如,下面的语句返回r在”cobra”中的位置,因为这个”hark”中各个字母在”cobra”首次出现的位置:
#include<bits/stdc++.h> using namespace std; int main() { string s; cin>>s; cout<<s.find_first_of("hark")<<endl; cout<<s.find_last_of("hark")<<endl; }
6.查找不是某一字符串中字符的首次/末次出现位置
find_first_not_of()方法在字符串中查找第一个不包含在参数中的字符
find_last_not_of()方法在字符串中查找第一个不包含在参数中的字符
#include<bits/stdc++.h> using namespace std; int main() { string s; cin>>s; cout<<s.find_first_not_of("hark")<<endl; cout<<s.find_last_not_of("hark")<<endl; } /* abcdk 1 3 */
7.sscanf(s,”%s %s”,x,y);其中s是字符串
8.字符串转数字:
string s="12"; int y=stoi(s); cout<<y<<endl;
数字转字符串:
string x=to_string(12);
9.字符串长度
#include<bits/stdc++.h> using namespace std; int main(){ string s1=""; string s2=""; cout<<(int)(s1.length()-s2.length())<<endl; cout<<s1.length()-s2.length()<<endl; unsigned a=1,b=2; cout<<(int)(a-b)<<endl; cout<<a-b; return 0; }
运行结果如下:
在这里我们往往容易忽略的是返回的长度值的数据类型为unsigned(32位),即无符号整数,在上面的测试数据中,s1.length()-s2.length()=-1,计算机中存储器中负数采用补码表示,-1的二进制补码为:1111…1(共32个1)。在无符号整数中恰好表示最大值为-1=。
10.大小写转化
transform(s.begin(),s.end(),s.begin(),::tolower); transform(s.begin(),s.end(),s.begin(),::toupper);
11.cin和getline
12、替换函数
string s; s.replace(1,3,"1111");//从1号位置起3个字符替换成1111
13、字符串比较
string a,b; cin>>a>>b; if(a.compare(b)==0) cout<<"相等"<<endl; else if(a.compare(b)==1) cout<<"前者大"<<endl; else cout<<"后者大"<<endl;
14、插入函数和删除函数
s.insert(1,"111");//在1位置后插入111 s.erase(1,2);//从1位置开始删两个
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/109563.html

