1. string对象的定义和初始化以及读写
string s1 , 默认构造函数,s1为空串
string s2(s1) , 将s2初始化为s1的一个副本
string s3("valuee") , 将s3初始化一个字符串面值副本
string s4(n,'c') , 将s4 初始化为字符'c'的n个副本
cin>>s5 , 读取有效字符到遇到空格
getline(cin,s6) , 读取字符到遇到换行,空格可读入,知道‘\n’结束
getline(cin,s7,'a') , 一个直到‘a’结束,其中任何字符包括'\n'都能够读入
2. string对象操作
s.empty() , 判断是否为空,bool型
s.size() 或 s.length() , 返回字符的个数
s[n] , 返回位置为n的字符,从0开始计数
s1+s2 连接,看下面例子:
可用此方法给字符串后面添加字符如:s=s+‘a’;
string s2=s1+", "; , 对,把一个string对象和一个字符面值连接起来是允许的
string s4="hello "+", "; , 错,不能将两个字符串面值相加
string s5=s1+", "+"world"; , 对,前面两个相加相当于一个string对象;
string s6="hello" + ", " + s2; ,错
(注:字符串尾部追加还可用s.append(“abc”)函数添加)
s1=s2 , 替换
s1==s2 , 判断是否相等,返回true或false
!=,<,<=,>,>= ,字符串比较,两个字符串短的与长的前面匹配,短的小于长的
3. string对象中字符的处理(头文件cctype)
isalnum(c) , 如果c是字母或数字,返回 true
isalpha(c) , 如果c是字母,返回true
iscntrl(c) , c是控制符,返回true
isdigit(c) , 如果c是数字,返回true
isgraph(c) , 如果c不是空格,则可打印,,则为true
islower(c) , 如果c是小写字母,则为true
isupper(c) , 如果c是大写字符,则为true
isprint(c) , 如果c是可打印的字符,则为true
ispunct(c) , 如果c是标点符号,则为true
isspace(c) , 如果c是空白字符,则为true
isxdigit(c) , 如果c是十六进制数,则为true
tolower(c) , 如果c是大写字符,则返回其小写字母,否则直接返回c
toupper(c) , 跟tolower相反
4. string对象中的函数
4.1 插入函数
s.insert( it , p ) , 把字符串p插入到it的位置
s.insert(p,n,t) , 迭代器p元素之前插入n个t的副本
s.insert(p,b,e) , 迭代器p元素之前插入迭代器b到e之间的所有元素
s.insert(p,s2,poe2,len) , 在下标p之前插入s2下标从poe2开始长度为len的元素
s.insert(pos,cp,len) , 下标pos之前插入cp数组的前len个元素。
4.2 替换函数
s.assign(b,e) , 用迭代器b到e范围内的元素替换s
s.assign(n,t) , 用n个t的副本替换s
a.assign(s1,pos2,len) , 从s1的下标pos2开始连续替换len个。
s.replace ( 3 , 3 , " good " ) 从第三个起连续三个替换为good
s.substr(i,j) , 表示的是从索引位置i开始,连续的j个字符组成的字串 //string::npos 判断字符串是否结束
4.3 删除函数
s.erase( 3 )||s.erase ( 0 , 4 ) ; 删除第四个元素或第一到第五个元素
4.4 其他函数
s.find ( " cat " ) , 超找第一个出现的字符串”cat“,返回其下标值,查不到返回 4294967295,也可查找字符;
通常与string::npos搭配使用
s.append(args) , 将args接到s的后面
s.compare ( " good " ) , s与"good"比较相等返回0,比"good"大返回1,小则返回-1;
reverse ( s.begin(), s.end () ) 反向排序函数,即字符串反转函数
sort(s.begin(). s.end()) , 对字符串进行排序
示例代码:
#include<iostream>
#include<algorithm>
#include<list>
using namespace std;
int main(){
string s1 = "qwerfhgt";
if(s1.find("fg")==string::npos){
cout << "s1中没有 fg " << endl;
}
sort(s1.begin(), s1.end());
cout << "排序之后:" << s1 << endl;
reverse(s1.begin(), s1.end());
cout << "反序之后" << s1 << endl;
return 0;
}
运行结果:

参考博客https://www.cnblogs.com/lanclot-/p/11142202.html