C++ string
引用头文件
#include<string>
using std::string
1 初始化
string s1 //默认初始化,s1是一个空串
string s2(s1); // s2是s1的副本 等价于 string s2=s1;
string s3(“value”); //s3是字面值“value”的副本,除了字面值最后的空字符除外
string s3=“value” //同上
string s4(n,‘c’); //把s4初始化为由连续n个字符c组成的串
2 string的操作
string s;
os<<s //将s写到输出流os中,返回os,例如
cout<<s;
is>>s //从is中读取字符串赋给s,返回is,例如
cin>>s;
s.empty() //s为空返回true,否则返回false
s.size() //返回s中字符的个数
s[n] //返回s中第n个字符的引用,位置n从0开始计起
s1+s2 //返回s1和s2链接后的结果
s1=s2 //用s2的副本
s1==s2 //等性对字母大小敏感
<,<=,>,>= //利用字符在字典中的顺序进行比较,对字母的大小敏感
getline(is,s) //从is中读取一行赋给s,返回is 例如
getline<cin,s> /*不包含换行符 getline的参数是 一个输入流和一个string对象函数从给给定的输入流中读取字符串
string 类型与其他类型相加
string s;
s = s+"Strive for excellence";
s = 'c' + s;
char ar[100] = " Cheer up";
s = s+ar;
3 额外的string 操作
substr 对字符串进行截取
basic_string substr( size_type pos = 0,
size_type count = npos ) const;
/* pos 指定开始位置,count 指定截取数量 */
#include <string>
#include <iostream>
int main()
{
std::string a = "0123456789abcdefghij";
// count is npos, returns [pos, size())
std::string sub1 = a.substr(10);
std::cout << sub1 << '\n';
// 默认第二个参数为npos,返回的子串是从位置10 到 结束
//...................................................
// both pos and pos+count are within bounds, returns [pos, pos+count)
std::string sub2 = a.substr(5, 3);
std::cout << sub2 << '\n';
// 截取从位置5 到 3 的子串
//...................................
// pos is within bounds, pos+count is not, returns [pos, size())
std::string sub4 = a.substr(a.size()-3, 50);
std::cout << sub4 << '\n';
如果 pos + count 大于string 的长度,到末尾就结束
//....................................
try {
// pos is out of bounds, throws
std::string sub5 = a.substr(a.size()+3, 50);
std::cout << sub5 << '\n';
} catch(const std::out_of_range& e) {
std::cout << "pos exceeds string size\n";
}
}
// 如果第一个参数就已经大于string的长度,就会出现抛出异常
搜索操作
string 搜索操作的返回类型是string:: size_type,表示匹配位置的下标,
如果搜索失败,就返回string:: npos(值为-1,由于是size_type 无符号整数,npos 就是最大值)
s.find(args) // 查找s中args第一次出现位置的下标
s.rfind(args) //查找s中args 最后一次出现的下标
s.find_first_of(args) //查找s中args中任何一个元素在s中第一个出现的位置
s.find_last_of(args) //查找s中args中任何一个元素在s中出现的最后一个位置
s.find_first_not_of(args) // 查找s第一个不在args 的字符的位置
s。find_last_not_of(args) // 在s中查找最后一个不在args 的元素的位置
// args 的类型
c,pos // 从s中位置pos开始查找c。 pos默认为0
s2,pos // 从s中位置pos开始查找s2。 pos 默认为0
cp,pos // cp 为c字符串
cp,pos,n /*从s中位置pos 开始查找指针cp指向的元素的数组的前n个字符. pos 和 n 没有默认值*/
数值转换
to_string(val) // 将数值转换为string
stoi(s,p,b) //p 是size_t* 类型,默认为0,b 是进制(默认是十进制)
stol(s,p,b)
stoul(s,p,b);
stoll(s,p,b);
stoull(s,p,b);
stof(s,p)
stod(s,p)
stolf(s.p)
例如
string s = string("10");
cout<<stoll(s,0,10)<<endl;//10
//或者 cout<<stoll(s)<<endl;
cout<<soll(s,0,16)<<endl;//16